穴掘り法で迷路生成

穴掘り法のアルゴリズム

自動生成迷路 を参考に実装しようとした。

laby test http://magnetpress.net/test/laby.html

穴掘り法とは

迷路生成アルゴリズムの一つ。

進行方向をランダム決める
現在位置から、進行方法の2マス先に注目
    対象が壁ならそこまで掘る
    対象が既に掘られている、もしくはマップ外なら、現在位置を今までの辿った道のどこか(偶数x偶数)に設定し直す

javascriptでこんな感じ。

これは二次元配列を返すだけのメソッド・・・ひどいソースですね!弁解の余地もないです。速度とか何も考えずに組んだらこうなった。


穴掘り法に従うかぎり孤立したブロックは出現しないはずなのだけど、何かを間違えたようでぼろぼろ出現してしまった。途中までは大丈夫だったんだけど、気づいたらこんなことに。
でもこれもありかと思ったので、孤立したブロックを削除してゲームのマップっぽく仕上げる。ある程度の初期条件を与えることで、狙った感じに地図を作れそう。


描画に関してはcanvasで行っている。その一部。

function drawMap(x,y,cell,map){
	for(var i=0;i<map.length;i++)
		for(var j=0;j<map[0].length;j++){
			if(map[i][j]>0){
				dInit();
				ctx.fillRect(x+cell*i,y+cell*j,cell,cell);
			}
			if(map[i][j]==-1){
                dInit();
                ctx.globalAlpha=0.5;
				ctx.fillStyle='rgb(255,0,0)';
				ctx.fillRect(x+cell*i,y+cell*j,cell,cell);
			}
		}
}

function dInit(){
	ctx.beginPath();
	ctx.globalAlpha=1.0;
	ctx.strokeStyle='rgb(0,0,0)';
	ctx.fillStyle='rgb(0,0,0)';
}