Programming

Day89「ランダムな地形」|Swift Playgrounds 攻略と解答例

コウです、よろしくお願いします!

「ゼロからプログラミングを始める」人に役立つ情報を発信しています。

今回はDay89「ランダムな地形」です。どうぞ!!

小学生から社会人までおすすめ!!プログラミング言語『Swift』について!【今始める理由と学び方】 こうといいます、よろしくお願いします! 小学校で教師をやっていた経験を活かして、 プログラミングについて悩みをお持ちの保護...

解答例

まずは解答例を確認しましょう。

コードは次のようになります。

※赤い点線はアプリケーションの仕様なので気にしないでください。

解答例を動画で確認する

上記のコードを実行した結果がこちらになります。

新しい関数:rundomInt関数

今回は新しく、『rundomInt関数』が登場しました!

これは、

指定したInt(整数)の範囲の中から1つをランダムに選ぶ

というものです。

randomInt(from: Int, to: Int)

from: Int』には範囲の初めの数字を入力します。

to: Int』には範囲の終わりの数字を入力します。

例えば、『randomInt(from: 3, to: 7)』なら

3,4,5,6,7の中から1つ選ぶ』となります。

このステージでは、空の配列の中にランダムな数字を入れていくときに使います。

ステージ攻略「ランダムな地形」

ステージを攻略していきましょう!

クリア条件

今回のクリア条件は、

配列を使ってステージにブロックを配置していく』ことです。

前回と似ていますが、今回は配列にランダムな数字を入れていきます

順に確認していきましょう。

Day88「地形を作る」|Swift Playgrounds 攻略と解答例 コウです、よろしくお願いします! 「ゼロからプログラミングを始める」人に役立つ情報を発信しています。 今回はDay88「地...

ステージ内のすべての座標を定数として宣言

後ですべての座標を参照することになるので、

ステージ内のすべての座標を宣言しておきます。

let allCoordinates = world.allPossibleCoordinates

高さの値を入れるための空の配列を宣言

前回とは違うところです。

var heights: [Int] = [ ]

この後のコードでこの配列に値を追加します。

空の配列にランダムな値を追加する

今回の肝の部分ですね。

for i in 1 … 20 {
  heights.append(randomInt(from: 0, to: 12))
}

heights配列』に0から12までのランダムな値を追加します。

forループになっているので、追加する処理が20回繰り返されます

heights配列には20個の項目がある状態になります。

項目の数はわかりますが、それぞれの数字はランダムなので

どういったステージが完成するのかはコードを実行するまでわかりません

また、同じコードを実行しても毎回違うステージが出来上がります

項目の数を数える変数を宣言

範囲外エラーを防ぐため、

項目の数を数える変数を宣言します。

var index = 0

これは前回と同じですね。

すべての座標を参照するループ(①〜⑤)

はじめに宣言したすべての座標を参照しながら、

①〜⑤の処理を繰り返します。

①『index』変数の値を0にする

前回と同様です。

if index == heights.count {
  index = 0
}

もし、indexの値がheightsを数えた値と同じならindexを0にする

heights.count』はheights配列の項目の数を表します。

項目はランダムに追加された20個です。

そしてindexは変数ではじめは0ですが、

この後の⑤の処理をすると1ずつ増えていきます

indexの数が20になったら、この①の処理で0に戻すというわけです。

そしてループは続きます。

②現在のheightsの値を示す変数を宣言

配列に追加されたランダムな数によって

処理を変えたいので、ループの中でどの数を使うのかがわかるように

変数を定義します。

var currentHeight = heights[index]

indexの値はこの後の⑤の処理で+1ずつ増えていきます。

それによってcurrentHeightも変化していくというわけです。

③currentHeightの値が0の時

③と④の処理は、currentHeightの値がいくつなのか

によって変わります。

ランダムな数字が入っているので、

コードを実行するまで何が起こるかはわかりません。

if currentHeight == 0 {
  world.removeBlock(at:coordinate)
  world.place(Water(), at: coordinate)

}

currentHeightが0のときには、

その座標のブロックを取り除いて水にする』としました。

④currentHeightの値が0以外の時

0以外のときには3つの処理を行います。

しかしcurrentHeightの値座標の値によって、

処理をするかどうかが変わります

④-1:currentHeightの値の分だけブロックを積む

for i in 1…currentHeight {
  world.place(Block(), at: coordinate)
}

currentHeightの値は0以外の時なので、この処理は必ず起こります

今参照している項目の数字の分だけブロックを積み上げます。

④-2:currentHeightの値が10より大きい時、キャラクターを北向きに配置する

if currentHeight > 10 {
  world.place(Character(), facing: north, at: coordinate)

}

ランダムな数字は『0から12まで』だったので、

この条件に合うのは『11,12』ですね。

11か12の時にキャラクターが北向きに配置されます。

currentHeight > 10 は10を含めません

currentHeight >= 10 なら10を含めます

④-3:列の値が3以上6未満の時、スイッチを配置する

} else if coordinate.column >= 3 && coordinate.column < 6 {
  world.place(Switch(), at: coordinate)
}

座標の値を参照します。

⑤indexの値に+1をする

参照する配列の値を1つずつずらしていくために、

indexの値に+1をしていきます。

index += 1

前回と同じですね。

まとめ:ランダムな地形

ランダムな数字を取り扱いました。

じゃんけんとかくじ引きのアプリを作る際に

必要になりそうですね!

今回のポイントを振り返りましょう。

ポイント
  • randomInt(from: Int, to: Int)で指定した範囲内のランダムな数字を1つ取り出すことができる。

次回はDay90「違う方法で配列を作る」でお会いしましょう!それでは!!

小学生から社会人までおすすめ!!プログラミング言語『Swift』について!【今始める理由と学び方】 こうといいます、よろしくお願いします! 小学校で教師をやっていた経験を活かして、 プログラミングについて悩みをお持ちの保護...