ページ 11

迷路攻略プログラム

Posted: 2019年1月22日(火) 14:09
by maliopop
左手法でクリアできるはずなのですが同じ場所でずっとくるくる回っているだけで前に進めません。

予想だとスタートから一歩前に進んでからこのif文を動かせばいいのかなと思うんですけどやり方がわかりません。
違う方法があるならば教えて下さるとありがたいです。

自分が書いた左手法のプログラムです。
なにか見たい部分があれば言っていただけると幸いです。

コード:

 
 //壁の状況を取得する
	wall = getWall();

	if (!(wall & D_WALL_LEFT)) { 		//左に壁がない
		leftTurn();
	}
	else if (!(wall & D_WALL_FRONT)) {	//前に壁がない
		straight();
	}
	else if (!(wall & D_WALL_RIGHT)) {	//右に壁がない
		rightTurn();
		
	}
	else {						//後ろに下がる
		back();
	}
 

Re: 迷路攻略プログラム

Posted: 2019年1月22日(火) 19:30
by みけCAT
まず、変な「予想」をするのは避け、「左手法」とはどのようなアルゴリズムなのかを調べましょう。
例えば迷路 第四章を参考にすると、以下のようなプログラムになると思います。

コード:

	//壁の状況を取得する
	wall = getWall();

	if (!(wall & D_WALL_LEFT)) {		//左に壁がない (左に進める)
		leftTurn();	// 左に向きを変える
	}
	else if (!(wall & D_WALL_FRONT)) {	//前に壁がない (前に進める)
		// そのまま
	}
	else if (!(wall & D_WALL_RIGHT)) {	//右に壁がない (右に進める)
		rightTurn();	// 右に向きを変える
	}
	else {						//後に向きを変える
		leftTurn();
		leftTurn();
	}
	straight();	// 前に1マス進む
参照先のサイトでは壁も道も同じ大きさのマスで表現された迷路を扱っているので「2コマ進む」となっていますが、
以下のような壁が薄い迷路であれば「1マス進む」でいいはずです。
meiro.png
迷路の例
meiro.png (828 バイト) 閲覧数: 1780 回