スポンサーリンク
スポンサーリンク
解答例
func solveColumn() {
while !isBlocked {
if isOnClosedSwitch {
toggleSwitch()
} else if isOnGem {
collectGem()
}
moveForward()
}
}
solveColumn()
turnRight()
moveForward()
turnRight()
solveColumn()
turnLeft()
moveForward()
turnLeft()
solveColumn()
解説
関数を使い、縦3列を1列ずつ解決していきました。
(Columnは、列という意味ですね)
NOT演算子(!)を使って、『行き止まりにならない限り』if文を実行します。
ステージの長さが変わるので、コマ数をforループで指定できないからです。
上記では『列(Column)』で解決しましたが、今度は『行(Row)』でやってみます。
func checkSwitch() {
if isOnClosedSwitch {
toggleSwitch()
}
}
func solveRow() {
checkSwitch()
turnRight()
moveForward()
collectGem()
moveForward()
checkSwitch()
turnLeft()
turnLeft()
moveForward()
moveForward()
turnRight()
moveForward()
}
moveForward()
while isOnOpenSwitch || isOnClosedSwitch {
solveRow()
}
最後は、『OR演算子(||)』を使って、『(onでもoffでも)スイッチ上にいる間は実行』とします。
スイッチのないマス上に来ると、条件を外れるので動作がストップしてゴールします。
他にも、たくさんやり方はありそうです。
複数の技を組み合わせてみるのは楽しいですね。
『デバッグ』(プログラムのバグや欠陥を発見&修正すること)を行い、失敗を通して学べることがたくさんあります。
早く進むことより、失敗をじっくり考えて成功へ導く過程が成長につながると思います。
要点まとめ
・どのテクニックを使うべきか明確に示していなくても、自分の力で解き方を選択して実行しよう
スポンサーリンク