コウです、よろしくお願いします!
「ゼロからプログラミングを始める」人に役立つ情報を発信しています。
今回はDay57「ワープのオンとオフ」です。どうぞ!!

解答例
まずは解答例を確認しましょう。
コードの解答例は次のようになります。

解答例を動画で確認する
上記のコードを実行した結果がこちらになります。
ステージ攻略「ワープのオンとオフ」
それではステージを攻略していきましょう!

今回のクリア条件は、『宝石を7個集めて、スイッチを1つ切り替える』ことです。

通りたいルートはこちらです。
ワープがあって進むことができなかったり、
逆にワープがないと反対側に渡れなかったりします。
適切にワープのオン・オフを切り替える必要がありますね。

解答例に沿って、分割して説明していきますね!
変数を宣言する
var gemCounter = 0
var switchCounter = 0
今回は『宝石とスイッチの数』によって
ワープの切り替えをしていきます。
そこで、宝石の数とスイッチの数を数える変数を宣言しました。
変数については↓から

whileループの条件
今回はwhileループを使っていきます。
変数とセットで出てくることが多いかもしれませんね!
gemCounter < 7
最終的に宝石を7つ集めてクリアすることを見越して、
宝石の数が7個になったらループが止まるようにします。
①1マス進む
moveForward()
1マスずつ調べて、宝石やスイッチがあったら動けるようにします。
②②’ワープのオン・オフを切り替える
ここが今回の肝になります。
if gemCounter == 4 && switchCounter == 0 {
purplePortal.isActive = true
} else {
purplePortal.isActive = false
}
まずは赤文字の部分から。
『宝石の数が4個でスイッチの数が0個の時、紫のワープはオンになる』
これはいつなのか。

赤で囲まれている部分を見てください。
この4個の宝石を全て取った時にワープはオンになります。
逆に『それ以外の時はワープをオフにする』
と書いてあるのが青文字の部分です。

4個の宝石を取ってワープした後に、スイッチを切り替えにいきます。
このスイッチを切り替えた時点で、赤文字の条件を満たさなくなるので
ワープはオフになります。
この赤文字と青文字により、宝石とスイッチの獲得数に応じて
スムーズに移動することが可能になります。
③宝石を取って数を数える
if isOnGem {
collectGem()
gemCounter += 1
}
②②’の条件に関わってくるので、
宝石を取ったら必ず変数の値にプラス1をしましょう。
④スイッチを入れて数を数える
if isOnClosedSwitch {
toggleSwitch()
switchCounter += 1
}
スイッチの場合も同様です。
この数がしっかりと数えられないと、
ワープのオン・オフがおかしくなります。
⑤後ろを向く
if isBlocked && isBlockedRight {
turnLeft()
turnLeft()
}

Uターンする必要のあるところが2箇所あります。
『前と右が行き止まり』の条件をつければ必要な場所でUターンできます。
まとめ:ワープのオンとオフ
変数を宣言することでスマートなコードにしました。
しかし、はじめからここまで書けなくていいと思います。
今回のポイントを振り返りましょう。
- 必要な時に適切にワープのオンとオフを切り替えることが大切
タイトルが「ワープのオンとオフ」なので、それができていれば大丈夫です!
次回はDay58「ワープを正しく操作する」でお会いしましょう!それでは!!
