まず、1つ目のスイッチまで移動し if 文を使ってスイッチ入れるか入れないか で後の2歩を進みます。
解答例
解説
moveForward()
moveForward()
if isOnClosedSwitch {
toggleSwitch()
}
moveForward()
if isOnClosedSwitch {
toggleSwitch()
}
moveForward()
if isOnClosedSwitch {
toggleSwitch()
}
前に進む
前に進む
もし、スイッチが切れていたら {
スイッチを入れる
}
前に進む
もし、スイッチが切れていたら {
スイッチを入れる
}
前に進む
もし、スイッチが切れていたら {
スイッチを入れる
}
⒉ else if を使う
コードを何度か実行してみると、スイッチと宝石がランダムに現れるので、
まず1つ目のマスに進んで if 文を追加し、if文内に、else ifブロックを追加します。
2つ目のマスでも、同じことを繰り返すので、for ループの中にネストします。
解答例
解説
for i in 1 ... 2 {
moveForward()
if isOnClosedSwitch {
toggleSwitch()
} else if isOnGem {
collectGem()
}
}
2回のループ {
前に進む
もし、スイッチが切れていたら {
スイッチを入れる
} そうでなく もし、宝石の上なら {
宝石を取る
}
}
⒊ 条件分岐コードをループする
ループの中で if 文を使い マスに宝石があれば取り、スイッチが切れていたら 入れて12個のマスを進みます。ワープの上に立つと次のレーンに移動します。
解答例
解説
for i in 1 ... 12 {
moveForward()
if isOnClosedSwitch {
toggleSwitch()
} else if isOnGem {
collectGem()
}
}
12回のループ {
前に進む
もし、スイッチが切れていたら {
スイッチを入れる
} そうでなく もし、宝石の上なら {
宝石を取る
}
}
⒋ 階段を上がる条件を探す
下の if 文で、条件にブール値の isOnGem (宝石の上)を使い、この条件がtrue(真)の場合に実行するコマンドを追加します。
elseブロックのコードは、何もせず 前に進むだけなので そのままにしておきます。
forループは16回のママで大丈夫です。
解答例
解説
for i in 1 ... 16 {
if isOnGem {
collectGem()
turnLeft()
} else {
moveForward()
}
}
16回のループ {
もし、宝石の上なら {
宝石を取る
左を向く
} そうでないなら {
前に進む
}
}
⒌ 関数をじょうずに使う
- if文を使って collectorToggle()(集めるまたは切り替える)関数を定義し、マスに何があるかを確認します。
- 関数の定義の下で、collectorToggle() やその他のコマンドを呼び出してステージをクリアします。
解答例
解説
func collectorToggle() {
if isOnGem {
collectGem()
} else if isOnClosedSwitch {
toggleSwitch ()
}
func solveRow() {
moveForward()
moveForward()
collectorToggle()
moveForward()
moveForward()
collectorToggle()
}
solveRow()
turnLeft()
moveForward()
moveForward()
turnLeft()
solveRow()
turnRight()
moveForward()
turnRight()
moveForward()
moveForward()
collectorToggle()
moveForward()
moveForward()
collectorToggle()
collectorToggle() 関数を定義 {
もし、宝石の上なら {
宝石を取る
} そうでなく もし、スイッチが切れていたら {
スイッチを入れる
}
solveRow() 関数を定義 {
前に進む
前に進む
collectorToggle() の実行
前に進む
前に進む
collectorToggle() の実行
}
solveRow() の実行
左を向く
前に進む
前に進む
左を向く
solveRow() の実行
右を向く
前に進む
右を向く
前に進む
前に進む
collectorToggle() の実行
前に進む
前に進む
collectorToggle() の実行
⒍ 囲まれる
論理関数 if と else if を使い条件を上手く組み合わせて、
解答例
解説
func collectorToggle() {
if isOnGem {
collectGem()
} else if isOnClosedSwitch {
toggleSwitch()
}
}
moveForward()
turnLeft()
for i in1 ... 4 {
collectorToggle()
moveForward()
turnLeft()
collectorToggle()
moveForward()
}
collectorToggle() 関数を定義 {
もし、宝石の上なら {
宝石を取る
} そうでなく もし、スイッチが切れていたら {
スイッチを入れる
}
}
前に進む
左を向く
4回のループ {
collectorToggle() 実効
前に進む
左を向く
collectorToggle() 実効
前に進む
}
⒎ 繰り返しを探す
ステージの状態を確かめて、進む方向を変えましょう。
この最後の課題では、中央の道に並んだ宝石を取り、スイッチを入れながら、ときどき寄り道しなければいけません。
そこで、条件分岐コードを使って、キャラクターが宝石の上にいるのか、切れているスイッチの上にいるのかを確かめて、その状態によってキャラクタ―が進む方向を変えましょう。
解答例
解説
func move3() {
moveForward()
moveForward()
moveForward()
}
func turnBuck() {
turnRight()
turnRight()
}
func solveRightSide() {
turnRight()
move3()
turnLeft()
moveForward()
collectGem()
turnBuck()
moveForward()
turnRight()
move3()
turnRight()
}
func solveLeftSide() {
turnLeft()
moveForward()
collectGem()
turnBuck ()
moveForward()
turnLeft()
}
for i in 1 ... 5 {
moveForward()
if isOnGem {
collectGem()
solveRightSide()
} else if isOnClosedSwitch {
toggleSwitch()
solveLeftSide()
}
}
3歩進む move3() の定義 {
前に進む
前に進む
前に進む
}
後ろを向く turnBuck() の定義 {
右を向く
右を向く
}
右側の解決 solveRightSide の定義 {
右を向く
move3() の実行
左を向く
前に進む
宝石を取る
turnBuck() の実行
前に進む
右を向く
move3() の実行
右を向く
}
左側の解決 solveLeftSide() の定義 {
左を向く
前に進む
宝石を取る
turnBuck() の実行
前に進む
左を向く
}
5回のループ {
前に進む
もし、宝石の上なら {
宝石を取る
solveRightSide() の実行
} そうでなく もし、スイッチが切れてたら {
スイッチを入れる
solveLeftSide() の実行
}
}



コメント