これまたややこしいコードですが、indexという変数を増やしていくことで、heights配列に入れた適当な数字を順番に先頭から使っていきます。ここではわかりやすくする為に、3,4,5と3つだけの数字をセットしておきます。つまり、heights[0]が3、heights[1]が4、heights[2]が5ということになります。この数字だけ12行目のfor文で繰り返されるので、ブロックの積まれる高さが、3個、4個、5個と増えていき、3つ使い切ると、9〜11行目のif文でindexが0に戻り、また3個になり以降、3,4,5,3,4,5,3,4,5…と繰り返されます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
var heights: [Int] = [3,4,5] //適当な整数を適当な数だけセット let allCoordinates = world.allPossibleCoordinates //以前でてきたステージの全コマを入れるメソッド var index = 0 //配列の何番目を使うかを示すインデックス(しおり)用の変数 for coordinate in allCoordinates { //1行目で配列に入れた数字の数(この場合は3つ)より大きな数字を13行目で //指定すると範囲外エラーになるので、3つ目まで使ったら最初に戻す。 //heights.countはheights配列の中にある要素数を意味する。 if index == heights.count { index = 0 } //heights(高さ)配列のindex番目の中身の数だけ繰り返す(=その数だけブロックが積まれる) for i in 0...heights[index] { // Place a block. // (ブロックを配置) world.place(Block(), at: coordinate) } // Increment the index. // (インデックスに1加えなさい) index += 1 } |
完成写真はこちら。
1行目の3,4,5を変えてみると出来上がる景色もかわります。数が3つでなくても大丈夫です。9行目でheights.countで個数を調べて上限値を決めているからです。これがもし、
1 2 3 |
if index == 3 { index = 0 } |
だったら最初の3つしか使われないことになります。3,4,5なら問題ありませんが、もし7,3,1,4にしても4が使われないままになります。5,1にしてしまったら数が足りなくてエラーになります。heights.countでその都度調べているので、1行目にいくつの数字をセットしても柔軟に対応できるわけです。
[2,5,1,7,4]に変えてみるとこんな形になります。