コウです、よろしくお願いします!
「ゼロからプログラミングを始める」人に役立つ情報を発信しています。
今回はDay81「反復処理を試す」です。どうぞ!!
解答例
まずは解答例を確認しましょう。
コードは次のようになります。
解答例を動画で確認する
上記のコードを実行した結果がこちらになります。
ステージ攻略「反復処理を試す」
ステージを攻略していきましょう!
クリア条件
今回のクリア条件は、
『ステージのすべてのマスに宝石とスイッチを1つずつ置く』ことです。
配列とループを組み合わせて使います!
for-inループ
例えば今までに学習したやり方でクリアしようとすると画像のようになりますよね。
ひとつひとつ書いていくのは面倒で、まだ5マスだからいいものの、100マスとか1000マスとかだとコードを書くだけで日が暮れそうです。
そんな悩みを解決してくれるのが、『for-inループ』です。
今までの『forループ』と似ていますが、
配列と組み合わせて使います。
列の値を宣言
let columns = [0, 1, 2, 3, 4]
まずは列の値を配列で宣言します。
for-inループを書く
for currentColumn in columns {
world.place(Gem(), atColumn: currentColumn, row: 1)
world.place(Switch(), atColumn: currentColumn, row: 1)
}
そして『for-inループ』の登場です。
わかりやすく以下に書いてみます。
for (ループ内での名前) in (参照する配列の名前) {
(ループさせたい処理)
}
ひとつずつ確認しましょう。
ループ内での名前
まずはforとinの間に『ループ内での名前』をつけます。
これはなんでも大丈夫です。
今回は説明文にあった『currentColumn(現在の列)』としました。
参照する配列の名前
次にinの後に参照する配列の名前を入れます。
初めに宣言した『columns』が入ります。
ループさせたい処理
今回は、「5マスすべてに宝石とスイッチを設置」したいです。
宝石やスイッチの設置には以下のようなコードを使いました。
world.place(Gem(), atColumn: Int, row: Int)
world.place(Switch(), atColumn: Int, row: Int)
先ほども出しましたが、
『Int』に数字を1つずつ入力していくのは大変です。
そこで宣言した配列を使うんですね。
各マスの座標は動画のようになっています。
(0,1)(1,1)(2,1)(3,1)(4,1)ですね。
列の値は『0』『1』『2』『3』『4』です。
行の値はすべて共通して『1』です。
『atColumn』は列の値、『row』は行の値がそれぞれ入ります。
先に行の話をすると、すべて共通しているので『1』になりますね。
そして問題の列。
ここで配列を使います。
配列では『columns』として[0,1,2,3,4]を宣言しました。
よってこの配列を使いたいんですけど、ややこしいのが名前です。
このループ内での名前は『currentColumn』にしましたよね。
だから『columns』ではなく、
『currentColumn』を列の値として入力します。
まとめ:反復処理を試す
配列を使ってforループを書きました。
なかなか複雑で難しかったですね。
今回のポイントを振り返りましょう。
- 配列とforループを組み合わせると、複雑な繰り返しもこなすことができる。
次回はDay82「ブロックを積む」でお会いしましょう!それでは!!