迷路生成
たびたび質問して申し訳ありません。
迷路生成を穴掘り法を使って作ろうと思ったのですが
うまくいきません。
ROAD=0,WALL=1
/*迷路の構造体*/
typedef struct Mazestruct{
/*迷路のサイズ(size[0]:横のサイズsize[1]:縦のサイズ)*/
int size[2];
/*スタートの座標(st[0]:横座標st[1]:縦座標(一番左上を(0,0))*/
int st[2];
/*ゴールの座標(goal[0]:横座標goal[1]:縦座標*/
int goal[2];
/*壁と通路のデータ*/
int maze_d[wid_max][len_max];
}Mazestruct;
void wall_make(int x,int y,Mazestruct *maze)
{
int x1,y1,px,py;
int gx[2]={1,-1},gy[2]={1,-1};
while(maze->maze_d[x][y]==ROAD){
while(1){
x1=x;
y1=y;
while(1){
px=rand()%2;
py=rand()%2;
if(maze->maze_d[x1+gx[px]*2][y1+gy[py]*2]==WALL){
maze->maze_d[x1+gx[px]][y1+gy[py]]=maze->maze_d[x1+gx[px]*2][y1+gy[py]*2]=ROAD;
x1=x1+gx[px]*2;
y1=y1+gy[py]*2;
}
else if(maze->maze_d[x1+1][y1]==ROAD&&
maze->maze_d[x1-1][y1]==ROAD&&
maze->maze_d[x1][y1+1]==ROAD&&
maze->maze_d[x1][y1-1]==ROAD){
goto quit;
}
}
}
}
quit:;
}
(px,py)を回転させるというところと
四方向をチェックするところをどのようにしたらよいか分りません。
回転させる方法が分らないので乱数をもう一度得るようにして四方向のチェックに関しては
四方向が道ならループをやめるようにしました。