2次元配列のよくあるパターン
CoddyのGDScriptジャーニー「ロジックとフロー」セクションの一部。レッスン 17/78。
グリッドをたどる方法には、何度も登場するものがいくつかあります。これらの例では、サイズが n の正方形グリッドを使います。
var grid := [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
]
var n := grid.size()対角線。主対角線では、行インデックスは列インデックスと等しくなります: grid[i][i]。右上隅から左下隅へ伸びる副対角線では、列は n - 1 - i です。ループは1つで十分です:
for i in range(n):
print(grid[i][i], " ", grid[i][n - 1 - i])1 3
5 5
9 7行、列、境界。一方のインデックスを固定し、もう一方をループします。最上段の行はgrid[0]、最下段の行はgrid[n - 1]です。列ではcを固定し、行を変化させます。
var left_total := 0
for r in range(n):
left_total += grid[r][0] # 左端の列: 1 + 4 + 7
print(left_total) # 12隣接マス。グリッドゲームでは、ある位置の周囲のセル(上、下、左、右)を見ることがよくあります。4つの移動量を[row, column]のペアの配列として格納し、グリッドから外れる移動量はスキップします。
var r := 0
var c := 1
for step in [[-1, 0], [1, 0], [0, -1], [0, 1]]:
var nr: int = r + step[0]
var nc: int = c + step[1]
if nr >= 0 and nr < n and nc >= 0 and nc < n:
print(grid[nr][nc])セル grid[0][1] は上端にあるため、隣接するセルは3つあります: 5、1、3。
チャレンジ
簡単gridという1つのパラメーターを持つprint_patternsという名前の関数を書いてください。gridは整数の正方形の2次元配列です(grid: Arrayとして宣言してください)。値を単一のスペースで区切って、6行を出力します。
Main diagonal:と、行インデックスと列インデックスが等しいセルAnti-diagonal:と、右上から左下の角までのセルTop row:と、最初の行Bottom row:と、最後の行Left column:と、上から下への最初の列Right column:と、上から下への最後の列
グリッドが[[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [13, 14, 15, 16]]の場合、出力は次のとおりです。
Main diagonal: 1 6 11 16
Anti-diagonal: 4 7 10 13
Top row: 1 2 3 4
Bottom row: 13 14 15 16
Left column: 1 5 9 13
Right column: 4 8 12 16テストではprint_patterns()を呼び出します。自分で呼び出さず、何も返さないでください。
自分で試してみよう
func print_patterns(grid: Array):
# ここにコードを書いてください
pass
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
ロジックとフローのすべてのレッスン
自分で練習してみよう: GDScriptオンラインコンパイラ