スポンサーリンク
スポンサーリンク
解答例
let totalGems = randomNumberOfGems
let expert = Expert()
let character = Character()
world.place(expert, facing: north, atColumn: 0, row: 4)
world.place(character, facing: north, atColumn: 2, row: 0)
var gemCounter = 0
func solveSide() {
for i in 1 ... 6 {
if character.isOnGem {
character.collectGem()
gemCounter += 1
}
character.jump()
}
}
func solveRow() {
while !character.isBlocked {
if character.isOnGem {
character.collectGem()
gemCounter += 1
}
character.moveForward()
}
}
expert.turnLockUp()
while gemCounter < totalGems {
solveSide()
character.turnRight()
character.moveForward()
character.turnRight()
solveRow()
character.turnLeft()
character.moveForward()
character.turnLeft()
solveSide()
character.turnRight()
character.turnRight()
}
解説
まずは、前回と同じように各キャラクターの座標を調べて、配置します。
ランダムに宝石が出てくるので、最終的な条件は
while gemCounter < totalGems {}
を置かないといけません。
そのために、var gemCounter = 0
として、初期値をゼロにしておきます。
さて、キャラクターはジャンプできますが、『行き止まりまでジャンプ』という指定はできないようです。
ぶつかってしまうからでしょうか。
なので、両サイドは6マスあるのでforループを使い、宝石を取りながらジャンプで進む、としました。
真ん中の列もそうですが、宝石を取った後に
gemCounter += 1
として、
宝石カウンターの数を毎回数えていくことを忘れないでください。
要点まとめ
・今まで習ったことを全て使って取り組んでみよう
真ん中の列は、両端しか宝石が出ないので、このようなやり方もあります。
解答例その2
let totalGems = randomNumberOfGems
let expert = Expert()
let character = Character()
world.place(expert, facing: north, atColumn: 0, row: 4)
world.place(character, facing: north, atColumn: 2, row: 0)
var gemCounter = 0
var platformPosition = 0
func jumpAcrossSide() {
for i in 1 ... 6 {
if character.isOnGem && gemCounter < totalGems {
character.collectGem()
gemCounter += 1
}
character.jump()
}
}
while gemCounter < totalGems {
jumpAcrossSide()
character.turnRight()
if platformPosition == 0 {
expert.turnLockUp()
platformPosition = 1
} else if platformPosition == 3 {
expert.turnLock(up: false, numberOfTimes: 2)
platformPosition = 1
}
character.moveForward()
if character.isOnGem && gemCounter < totalGems {
character.collectGem()
gemCounter += 1
}
if platformPosition == 1 {
expert.turnLock(up: true, numberOfTimes: 2)
platformPosition = 3
}
character.moveForward()
character.turnRight()
}
スポンサーリンク