whileループ 4. 2つのループ

isBlockedが使えないよう、わざわざ曲がり角の先に1つコマが置かれてますね。
それ以外の条件(パターン)を見つけましょう。

例では同じループの中でスイッチの状態が変わる(変える)ところがポイントです。閉スイッチと開スイッチが混在してますが、どのみち閉だったらオンにしないとならず、その後であれば同じ様に曲がり角の条件として利用できるわけです。

whileループ 3. 正しいループを使う

ここもワープを考えると、実はひたすら単純なパターンを繰り返しているステージであるということに気付くと思います。
その1ループ分をコードにし、さいごまで繰り返すwhileループを作りましょう。

下の例ではループ構造とループの中身をわけて見通し易い様に、中身をfuncで関数にしてみました。こうしておくとwhile文の{}の中がシンプルになって、どこでなにをしているのか読み取りやすくなります。

whileループ 2. whileループをじょうずに使う

見かけ上は3本道ですが、ワープでつながっているので実際は1本道のシンプルなステージです。
その先端までwhileループで進むための条件を考えてみましょう。
ポイントは、閉スイッチをオンにしていくことと、ゴールまで進むことを切り離して考えることです。まずはゴールまでいって止まることを考え、その途中でもし閉スイッチがあったらオンにしていく、という手順で考えてみましょう。

whileループ 1. 条件を決めてコードをループする

繰り返しに新しいコマンドが追加されます。あらかじめ決まった回数繰り返すforと違って、ある条件がtrueである間は繰り返す、というifとforを組み合わせたようなものです。

のように書きます。条件式はif文と同じで、trueかfalseのどちらかの結果になるisBlockedやisOnGemなどが入ります。もちろん前節で学んだ論理演算子、!、&&、||などを組み合わせることも可能です。

と書けば、まず行き止まりかどうか判定し、行き止まりであれば{}の処理を実行します。終わったらまたwhile文の最初に戻り、もう一度行き止まりかどうか判定します。つまり、この条件式は中身の処理を繰り返す間にいつかはfalseにならなければなりません。でなければwhileループが永遠に繰り返されて先に進まなくなるからです。例えば、

であれば、向きをかえている間にいつかは正面が行き止まりではなくなり、先へ進めることになります。
また最初から条件がfalseの場合は{}の中は一度も実行されずにスルーされる事も憶えておきましょう。

ステージはシンプルな一本道です。最後に開スイッチがあることは決まっていますが、その途中にある閉スイッチがいくつあるかは実行の度に変化するので、繰り返し回数を書かなければならないfor文は馴染みません。そこで、「ある条件がtrueの間繰り返す」while文の出番なわけです。この場合、「開スイッチに出くわすまではmoveForward()で進む」ということになります。言い換えれば、「開スイッチの上でない」がtrueになることが{}の中を実行する条件です。しかしisOnOpenSwitchは「開スイッチの上である」なので、trueとfalseを逆転させるNOT演算子(!)を活用しましょう。

論理演算子 5. 論理の迷宮

論理演算子を使った総ざらいの設問です。NOT、AND、ORを使いこなしてクリアを目指しましょう。

ステージのポイントとしては、宝石と閉スイッチの両方があるマスでは右に脇道があって2マス先に宝石、というパターンが見て取れます。
次に曲がる位置ですが、行き止まりとは限らないのでisBlockedを条件にするのは適切ではないようですよ?