寝るよ。疲れた。おいらの睡眠時間を返せ…。寝る前にみるんじゃなかった。
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 && $tmp_x < (MAP_X-1) && $tmp_y > 0 && $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>
締め切りはないから、土日にでも再挑戦してみてください。 アルゴリズムは自分で考えなきゃ意味ないよ。 車輪の再開発って悪いことじゃないんだよ。