このステージは日本語の疑似コードでほぼ答えが書いてありますので、ここまで学んだ記法を駆使してコードに落とし込んでください。
アルゴリズムという耳慣れない言葉が出てきますが、ここではあまり深く考えなくて大丈夫です。ある共通の処理ルール(こういう時はこうする)を組み合わせたもの位に考えておいてください。たいていはfunc文を使って名前をつけて(今回はnavigateAroundWall)おき、繰り返し、あるいはあちこちから簡単に呼び出して利用できるように準備しておきます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
//(右側の)壁に沿って進むアルゴリズムをfunc文で定義 func navigateAroundWall() { if isBlockedRight { moveForward() } else { turnRight() moveForward() } } //宝石を採りつつ閉スイッチに到達するまで右手法で進む while !isOnClosedSwitch { while !isOnGem && !isOnClosedSwitch{ navigateAroundWall() } collectGem() turnLeft() turnLeft() } toggleSwitch() |
今回のコードで、
- 右側が壁だったら(isBlockedRight)前進(moveForward)
- それ以外の(右が壁じゃない)時は右へ進む
という処理ルールを定義しておくことで、プログラムを実行する度にステージの壁の形が変化しても柔軟に対応でき、都度コードを書き換えることなくクリアできました。こういう使い回しが聞く処理パターン(の集まり)をアルゴリズムと呼びます。プログラミングの世界では、このように1つのコードで様々な状況に対応できるようにすること(汎用化)が腕の見せ所です。