このステージでもexpert君とcharacterちゃんの2体を交互に操作してクリアを目指します。
expert君は基本同じ場所から動けず、両側にあるスイッチをふり返りながら操作するだけ。実際に動いて宝石を集めるのはもっぱらcharacterちゃんの役目です。
どちらに指示を出しているのか気をつけてドット記法でコードを書けば、行数は多いですがさほど難しいステージではないでしょう。
共通パターンとして「目の前のマスの宝石をとって振り返って最初のマスに戻る」というのがあちこちにあるなと思い関数化しました。
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 33 34 35 36 37 38 39 40 |
//2体のインスタンスを準備 let expert = Expert() let character = Character() //characterちゃんが繰り返しやるパターンを関数に func 取って戻る() { character.moveForward() character.collectGem() character.turnRight() character.turnRight() character.moveForward() } //ここから本編 character.move(distance: 2) character.collectGem() character.turnRight() expert.turnLock(up: true, numberOfTimes: 4) character.moveForward() 取って戻る() character.turnRight() expert.turnLock(up: false, numberOfTimes: 3) for i in 1 ... 3 { expert.turnRight() expert.turnLock(up: true, numberOfTimes: 1) } 取って戻る() for i in 1 ... 2 { character.moveForward() character.turnLeft() character.moveForward() 取って戻る() character.moveForward() character.turnLeft() character.moveForward() } 取って戻る() expert.turnLock(up: true, numberOfTimes: 3) character.turnRight() 取って戻る() |
func 協働() {
character.turnLeft()
expert.turnLock(up: false, numberOfTimes: 3)
character.moveForward()
character.collectGem()
character.turnLeft()
character.turnLeft()
character.moveForward()
expert.turnLock(up: true, numberOfTimes: 3)
character.turnLeft()
expert.turnRight()
}
func 移動1() {
character.moveForward()
character.collectGem()
character.turnRight()
character.moveForward()
協働()
}
func 移動2() {
character.moveForward()
character.moveForward()
協働()
}
for i in 1 … 4 {
expert.turnLock(up: true, numberOfTimes: 4)
expert.turnRight()
}
character.moveForward()
移動1()
移動1()
移動2()
移動1()