2007-07-11

もうあきらめた。

寝るよ。疲れた。おいらの睡眠時間を返せ…。寝る前にみるんじゃなかった。

http://www.maid-robo.com/masda/mairo.php

完成しなかったよ。

迷路ロジックは多分そこらへんをぐぐればいっぱいあるとおもうが

あえて独自で車輪の再発明をしてみた。

うんこくさいプログラムになってしまった。洗練さのかけらもない。

しかも完成していない。

誰か完成させておいて。

なにか二次元配列をつかいたかったのだけど、php配列ってよくわからないや。

んー。いけてないなーーー。。。。

これが俺の限界か…。

おやすみ。。。



<pre>
<?php

/**
http://anond.hatelabo.jp/20070711013155
迷路を作成するプログラムを書いてみましょう。
1BIT/PIXEL のビットマップで道と壁の幅は1PIXEL。
任意の解像度で出力できること。
入り口と出口があること。
実行毎に異なる迷路が生成されること。
それをASCIIテキストで出力すること。
ソースコードテキストで出力した迷路増田に投稿すること。
言語問わず。
期限無し。



出力例)
##########
..#...#...
#.#.#.##.#
#...#..#.#
#####.##.#
#...#.#..#
#.#.....##
##########
***/



define("MAP_X" ,10);
define("MAP_Y" ,10);
define("MAP_WALL" ,"■");
define("MAP_LINE" ," ");


// 塗り。
for ($y = 0 ;$y < MAP_Y  ; $y++) {
	for ($x = 0 ;$x < MAP_X  ; $x++) {
		$map[$y][$x] = MAP_WALL;
	}
}


// start pointの設定
if (rand(0,1)%2)  {
	$start_x = rand(1,MAP_X-2);
	$start_y = (MAP_Y-1)*rand(0,1);
} else {
	$start_x = (MAP_X-1)*rand(0,1);
	$start_y = rand(1,MAP_Y-2);
}
$map[$start_x][$start_y] = MAP_LINE;


$i=0;
$giveupcnt = 0;
$now_x = $start_x;
$now_y = $start_y;


while ($i < 40) {


	if ($giveupcnt > ((MAP_X-1)*(MAP_Y-1))) {
		break;
	}

	if (rand(0,1)%2)  {
		$rnd_x = rand(-1,1);
		$rnd_y = 0;
	} else {	
		$rnd_x = 0;
		$rnd_y = rand(-1,1);
	}

	$tmp_x = $now_x + $rnd_x;
	$tmp_y = $now_y + $rnd_y;

	// 壁だったらパス
	if ($tmp_x <= 0 || $tmp_x >= (MAP_X-1) ) {
		$giveupcnt++;
		continue;
	}
	if ($tmp_y <= 0 || $tmp_y >= (MAP_Y-1) ) {
		$giveupcnt++;
		continue;
	}

/**
print("@".($tmp_x) . "," . ($tmp_y)."<br>");
print(($tmp_x + $rnd_x) . "," . ($tmp_y + $rnd_y)."<br>");
print(($tmp_x + -1*$rnd_x) . "," . ($tmp_y + -1*$rnd_y)."<br>");
print(($tmp_x + -1*$rnd_y) . "," . ($tmp_y + -1*$rnd_x)."<br>");
***/

	// そこを掘ることにより他の壁とつながってしまうのであればパス
	if ($tmp_x > 0 &amp;&amp; $tmp_x < (MAP_X-1) &amp;&amp;
		$tmp_y > 0 &amp;&amp; $tmp_y < (MAP_Y-1) ) {

		if ($map[$tmp_x + $rnd_x][$tmp_y + $rnd_y] == MAP_LINE ||
			$map[$tmp_x + $rnd_y][$tmp_y + $rnd_x] == MAP_LINE ||
			$map[$tmp_x - $rnd_y][$tmp_y - $rnd_x] == MAP_LINE ) {
			$giveupcnt++;
			continue;
		}
	}


	// 適当なマス数掘り進んだところで壁際まできれてばゴールをつくる
	// 未実装


	$now_x = $tmp_x;
	$now_y = $tmp_y;

	$map[$now_x][$now_y] = MAP_LINE;
	$i++;

}


// 4方壁のところを起点に同じルールで通路をつくる



foreach ($map as $key => $value) {
	$value = join("",$value);
	print($value."<br>");
}

//print_r($map);


?>
</pre>

pre記法で書いたらトラバがとんでなかったので、追加。

http://anond.hatelabo.jp/20070711013155

  • 締め切りはないから、土日にでも再挑戦してみてください。 アルゴリズムは自分で考えなきゃ意味ないよ。 車輪の再開発って悪いことじゃないんだよ。

記事への反応(ブックマークコメント)

ログイン ユーザー登録
ようこそ ゲスト さん