Swift Playgrounds

コードを学ぼう2【決まった数だけ集める】解答例と解説

決まった数だけ集める

解答例

let totalGems = randomNumberOfGems
var gemCounter = 0

while gemCounter < totalGems {
  if isOnGem {
    collectGem()
    gemCounter += 1
  }
  if isBlocked {
    if isBlockedLeft && isBlockedRight {
      turnRight()
      turnRight()
    } else if isBlockedLeft {
        turnRight()
    } else {
        turnLeft()
    }
  }
  moveForward()
}

解説

最初からlet totalGems = randomNumberOfGemsという定数が設置してあります。
これでランダムな数(1〜12)が何なのか、わかるようになっています。
なぜそんな事ができるのかは、、深く考えず、とにかく今は定数の練習だと思って取り組みましょう。
もう何度か『<』の形が出てきたので、慣れてきたと思います。
変数(var)でgemCounterを定義し、『+=』(複合代入演算子)で1を追加していくんでしたね。

whileループで、定数で決められた数になるまでifで調べながら繰り返します。
曲がり方のコードは、多種多様なやり方があり、人それぞれです。
今回は3種類の曲がり角があったので、まずifで行き止まりを大きく囲み

①右も左も行き止まりの場合は、右折を2回
②左が行き止まりの場合は、右折
③それ以外は、左折

としました。

以下のようなやり方もあります。
色々試してみてくださいね。

let totalGems = randomNumberOfGems
var gemCounter = 0

while gemCounter < totalGems {
  if isOnGem {
    collectGem()
    gemCounter += 1
  }
  if isBlocked {
    turnRight()
    if isBlocked {
      turnLeft()
      turnLeft()
      if isBlocked {
        turnLeft()
      }
    }
  }
  moveForward()
}
要点まとめ

・比較演算子について、しっかり復習しておこう