スタート地点を基点に、右に宝石が2つ、左に閉スイッチが2つあり、それが3列続くというステージです。
ここでも色々なやり方がありますが、私は、「宝石をとり戻る」「スイッチを入れ戻る」という2つのパターンを関数にし、それをfor文で繰り返すというアプローチを取りました。宝石とスイッチ1行文で1つの関数にしてもいいし、まずは宝石だけとって次にスイッチ、というやり方でもいいでしょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
//右にある宝石2つをとって最初の位置に戻る func get2gems() { turnRight() moveForward() collectGem() moveForward() collectGem() turnRight() turnRight() moveForward() moveForward() } //左にある閉スイッチを操作して最初の位置に戻る func toggle2switches() { moveForward() toggleSwitch() moveForward() toggleSwitch() turnRight() turnRight() moveForward() moveForward() //次の列に進む為の追加処理 turnLeft() moveForward() } //ここから本編 for i in 1 ... 3 { get2gems() toggle2switches() } |
1列が終わって前の列に進む処理は本編のfor文の中に書いてもいいんですが、毎回必ずtoggle2switches()の直後に実行されることになるので、まとめてしまいました。ただしこれだと3列終わった後に無駄に4列目に進んでしまうという弱点がありますね。