Swift Playgrounds

コードを学ぼう2【ワープを作る】解答例と解説

ワープを作る

解答例

let greenPortal = Portal(color: .green)

world.place(greenPortal, atStartColumn: 1, startRow: 5, atEndColumn: 5, endRow: 1)

var gemCounter = 0

while gemCounter < 8 {
  moveForward()
  if gemCounter == 4 {
    turnLeft()
    turnLeft()
  } else {
    turnLeft()
  }
  moveForward()
  collectGem()
  gemCounter += 1
  turnLeft()
  turnLeft()
}

解説

今回は、ワープ(Portal)を設置します。
ワープの色は様々に設定できますが、
今回は最初から緑色に設定し、『greenPortal』という名前がつけられています。
色んな色のワープを作らなければならない場合もあるので、
後で見てわかりやすいインスタンスの名前をつけた方がいいですね。

ちなみに、元々今回は緑色の四角形が表示されています。
ここは、基本的な色の場合、.green.pink.yellowのように
ドットで表現することができます。

let pinkPortal = Portal(color: .pink)

のような感じです。
また、(color: )の場所をクリックすると、パレットが表示されて
好きな色を選ぶこともできます。
(設定により、もっと複雑な色を指定することもできます)

ワープを設置するときは、色に加えて、入るワープ出るワープの座標を同時に設定しなければいけません。
どちらか一方だけだとエラーになるので、注意しましょう。

入口側の列 atStartColumn
入口側の行 startRow
出口側の列 atEndColumn
出口側の行 endRow
要点まとめ

・ワープの設置は、スタートとエンドの2箇所の座標が必要

解答例その2

let greenPortal = Portal(color: .green)

world.place(greenPortal, atStartColumn: 1, startRow: 5, atEndColumn: 5, endRow: 1)

func collectAndTurn() {
  collectGem()
  moveForward()
  turnRight()
  moveForward()
  turnRight()
  turnRight()
}

greenPortal.isActive = false

for i in 1 ... 4 {
  collectAndTurn()
}

greenPortal.isActive = true

moveForward()
moveForward()
turnRight()
turnRight()

greenPortal.isActive = false

for i in 1 ... 4 {
  collectAndTurn()
}