❐ ⅳ 条件分岐コード


まず、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回のループ {
    もし、宝石の上なら {
        宝石を取る
        左を向く
    } そうでないなら {
        前に進む
    }
}

⒌ 関数をじょうずに使う

  1. if文を使って collectorToggle()(集めるまたは切り替える)関数を定義し、マスに何があるかを確認します。
  2. 関数の定義の下で、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() の実行
    }
}

コメント