条件分岐コードの最終課題ステージです。
まず一件複雑そうなステージからパターンを探しましょう。中央の道は途中宝石と開/閉両方のスイッチが並んでいます。まずは枝道を無視して、この中央の道をif文でチェックしながら反対側の端まで進むコードを書いてみるといいでしょう。
それができたらあらためて残りの脇道について考えます。どうも右は右、左は左でパターンがあります。そして中央の道から左右どちらに脇道が生えているかもそのコマにあるものと関連付いているようですよ?
連続で進んだり、振り返ったりが多いステージなので、そこも関数にして簡単に一括処理できるようにしてみました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
//3歩進む関数 func move3() { for i in 1 ... 3 { moveForward() } } //振り返る関数 func turnBack() { turnRight() turnRight() } //右の脇道を処理して戻る関数 func solveRightSide() { turnRight() move3() turnLeft() moveForward() collectGem() turnBack() moveForward() turnRight() move3() turnRight() } //左の脇道を処理して戻る関数 func solvedLeftSide() { turnLeft() moveForward() collectGem() turnBack() moveForward() turnLeft() } //ここから本編 for i in 1 ... 5 { moveForward() if isOnGem { collectGem() solveRightSide() //右の脇道へ行く } else if isOnClosedSwitch { toggleSwitch() solvedLeftSide() //左の脇道へ行く } } |