コウです、よろしくお願いします!
「ゼロからプログラミングを始める」人に役立つ情報を発信しています。
今回はDay88「地形を作る」です。どうぞ!!
解答例
まずは解答例を確認しましょう。
コードは次のようになります。
解答例を動画で確認する
上記のコードを実行した結果がこちらになります。
ステージ攻略「地形を作る」
ステージを攻略していきましょう!
クリア条件
今回のクリア条件は、
『配列を使ってステージにブロックを配置していく』ことです。
前回も学習しましたが、範囲外エラーに気を付ける必要があります。
高さを指定する配列を宣言
今回は、高さを指定するための配列を使います。
var heights: [Int] = [ 1,2,3 ]
と言っても難しいことはなく、Int型で宣言すれば大丈夫です。
『 : 』の後が『[Int]』になります。
数字の『1,2,3』の箇所はどんな数字をいくつ入れても大丈夫です。
ここにどんな数字を入れるかによって、
できあがるステージの形が変わります。
ステージにあるすべての座標を定数として宣言
1マスずつにブロックを置いていくので、
ステージ内のすべての座標を宣言します。
let allCoordinates = world.allPossibleCoordinates
今までもこのコードは使っていましたが、
あらかじめ入力されていました。
自分で入力するのは初めてですね。
インデックスを数える変数を宣言する
後で使うことになるのですが、
『今、配列の中の何個目の項目(インデックス)を参照しているのか』
を数えるための変数を定義します。
var index = 0
範囲外エラーを防ぐために使う重要な変数です。
すべての座標を参照するループ(①〜③)
はじめに宣言したすべての座標を参照しながら、
①〜③の処理を繰り返します。
①『index』変数の値を0にする
先ほど宣言したindexという名前の変数の出番です。
if index == heights.count {
index = 0
}
『もし、indexの値がheightsを数えた値と同じならindexを0にする』
『heights.count』はheights配列の項目の数を表します。
項目は『1,2,3』なので3つですね。
そしてindexは変数ではじめは0ですが、
この後の③の処理をすると1ずつ増えていきます。
indexの数が3になったら、この①の処理で0に戻すというわけです。
そしてループは続きます。
②heights配列を参照しながらブロックを置く
ここは色々な数字が出てきてややこしいですが、頑張りましょう!
heights配列をもう一度確認しましょう。
var heights: [Int] = [ 1,2,3 ]
[ 1,2,3 ]なので、
『インデックス0が1、インデックス1が2、インデックス2が3』ですね。
for i in 0…heights[index] {
world.place(Block(), at: coordinate)
}
forループの終わりの数は、heights[index]なので
heights配列の値分繰り返すことになります。
注意が必要なのは、forループが0から始まっていることです。
これまでのステージを見てもらえればわかりますが、
forループは1から始まっていました。
0から数を数えると、普段数えているよりも1つ増えます。
例えばheights配列を参照していくとインデックス0は1なので、
forループは1回繰り返すのかなと思いますが、0から数えると2回になります。
つまり、ステージには2個のブロックが置かれることになります。
③indexの値に+1をする
ブロックを置き終えたら、indexの値に+1をします。
ループが3周したときにここでindexの値を3にして①に戻ると、
①の処理でindexは0になります。
0になったindexはまた②を経由して③に戻ってきます。
そして+1をする。①に戻す…と繰り返していくわけです。
まとめ:地形を作る
数字がたくさん出てきてややこしかったかもしれません。
heights配列の値を[1,2,3]としましたが、
変えてみると解答例とは違ったステージが出来上がるので
ぜひ試してみてください!
今回のポイントを振り返りましょう。
- 『(配列名).count』で配列の項目の数がわかる。
- 範囲外エラーにならないように変数を使って0に戻す処理をする。
次回はDay89「ランダムな地形」でお会いしましょう!それでは!!