2つのキャラクターを使い分ける練習です。Character型のキャラに.jump()という能力(メソッド)が追加されました。isBlockedな場面でも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 |
//2体のキャラクターexとchを準備 let ex = Expert() let ch = Character() //宝石をとって目の前のブロックを飛び越える(2回ジャンプする) func collectJumpJump() { ch.collectGem() ch.jump() ch.jump() } //2体のキャラクターをスタート地点に移動 world.place(ex, facing: north, atColumn: 3, row: 0) world.place(ch, facing: north, atColumn: 0, row: 0) //ここから本編 ex.toggleSwitch() collectJumpJump() collectJumpJump() ch.turnRight() collectJumpJump() collectJumpJump() ch.turnLeft() collectJumpJump() ch.collectGem() |

鍵穴操作しなくていいのか〜!
let greenBot = Character()
let redBot = Expert()
enum TurnTo {
case left
case right
case none
}
world.place(redBot, facing: .north, atColumn: 3, row: 0)
world.place(greenBot, facing: .north, atColumn: 0, row: 0)
func greenBotMove(distance: Int,turnTo: TurnTo) {
for i in 1 … distance {
if greenBot.isOnGem {
greenBot.collectGem()
}
if greenBot.isBlocked {
greenBot.jump()
}
}
if turnTo == .left {
greenBot.turnLeft()
} else if turnTo == .right {
greenBot.turnRight()
}
if greenBot.isOnGem {
greenBot.collectGem()
}
}
redBot.turnLock(up: true, numberOfTimes: 2)
redBot.toggleSwitch()
greenBotMove(distance: 4, turnTo: .right)
greenBotMove(distance: 4, turnTo: .left)
greenBotMove(distance: 2, turnTo: .none)