前回までで、とりあえず右手法でゴールまでたどり着くことができました。今後は逆の左手法を試してみましょう。
左手法では、下の図のように進めばいいわけです。前回と通り道が違いますね。当然ですが、行き止まりに入っても戻ってこなければいけません。

右手法では、以下の優先順位で進みます。
(1) 右が開いていれば右に進む(右に90度回転)
(2) (1)以外で正面が開いていれば直進する(向きはそのまま)
(3) (1)(2)以外で左が開いていれば左に進む(左に90度回転)
(4) 上記以外の場合、来たところに戻る(180度回転)
左手法では、左側をチェックすることを優先させます。そのため、以下の順序に変更します。
(1) 左が開いていれば左に進む(左に90度回転)
(2) (1)以外で正面が開いていれば直進する(向きはそのまま)
(3) (1)(2)以外で右が開いていれば右に進む(右に90度回転)
(4) 上記以外の場合、来たところに戻る(180度回転)
つまり、(1) と (3) が入れ替わっただけですね。これをコードにしてみましょう。上を向いているとき(dir == 0)のコードは以下です。
if(dir==0){・・・} の中に、if ,else if,else if,else と4つのブロック(”{” から “}” までのかたまり)がありますが、ひとつめの if の中身と3つ目のelse if の中身が入れ替わっただけです。
if (dir == 0){
if (map[Y][X-1] == 0){
X--;
dir = 3;
E[0] = loadImage("chara3.jpg");
}
else if (map[Y-1][X] == 0) Y--;
else if (map[Y][X+1] == 0){
X++;
dir = 1;
E[0] = loadImage("chara1.jpg");
}
else {
dir = 2;
E[0] = loadImage("chara2.jpg");
}
}
他の箇所(dir が 1 ~ 3 の場合)も修正しておきます。実行してみると・・・

前回とは違う、上側の道をたどってゴールにたどり着きました。