迷路を右手法で攻略する(5) 左手法

前回までで、とりあえず右手法でゴールまでたどり着くことができました。今後は逆の左手法を試してみましょう。

左手法では、下の図のように進めばいいわけです。前回と通り道が違いますね。当然ですが、行き止まりに入っても戻ってこなければいけません。

右手法では、以下の優先順位で進みます。

(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 の場合)も修正しておきます。実行してみると・・・

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

Leave a Reply

Your email address will not be published. Required fields are marked *