Swift Playgrounds

コードを学ぼう2【島を渡る】解答例と解説

島を渡る

解答例

let character = Character()
world.place(character, facing: south, atColumn: 1, row: 7)

func completeIsland() {
  character.toggleSwitch()
  character.jump()
  character.collectGem()
  character.turnLeft()
  character.jump()
  character.toggleSwitch()
}

completeIsland()
world.place(character, facing: north, atColumn: 6, row: 3)
completeIsland()
world.place(character, facing: east, atColumn: 1, row: 1)
completeIsland()

解説

方法は確かにたくさんありますが、このやり方は・・・💦
でも、禁止されているわけではありません。
それぞれの島で、新しくキャラクターを配置してゴールしています。
関数でひとつにまとめられる法則をみつけて、すっきり解決できました。

以下の解答例では、ワープを作ってゴールしています。
他にも、何もない場所に道を作って歩いて周ってゴールするやり方などもあります。
色々チャレンジしてみましょう!

解答例その2

let character = Character()
let pinkPortal = Portal(color: .pink)
let greenPortal = Portal(color: .green)

world.place(character, facing: east, atColumn: 5, row: 3)
world.place(pinkPortal, atStartColumn: 5, startRow: 3, atEndColumn: 1, endRow: 2)
world.place(greenPortal, atStartColumn: 1, startRow: 3, atEndColumn: 2, endRow: 7)

func solveIsland() {
  character.jump()
  character.toggleSwitch()
  character.turnLeft()
  character.jump()
  character.collectGem()
  character.turnLeft()
  character.jump()
  character.toggleSwitch()
  character.turnLeft()
}

pinkPortal.isActive = false
solveIsland()
pinkPortal.isActive = true
character.jump()
pinkPortal.isActive = false
solveIsland()
character.jump()
character.turnRight()
character.moveForward()
greenPortal.isActive = false
character.turnLeft()
solveIsland()