您的位置:首页 > 其它

随机迷宫

2015-07-30 16:26 134 查看
最近写unity的一个游戏,有一关要实现随机迷宫地图,就查了查随机迷宫实现的算法

随机迷宫设置一个地图,假设地图中都是墙,咱们要种墙中挖出一个通道,这样就可以实现一个随机迷宫。

在每个位置把空间用十字分成四个部分,若是不连通其他通道就接着挖。

#include<cstdio>
#include<cstdlib>
#include<time.h>
#include<windows.h>
#define MAZE_MAX 50
char map[MAZE_MAX+2][MAZE_MAX+2];
int search(int x,int y)
{
static int d[4][2]= {0,1,1,0,0,-1,-1,0};
int zx=x*2,zy=y*2,next,turn,i;
map[zx][zy]=1;
turn=rand()%2? 1:3;
next=rand()%4;
for(i=0; i<4; i++,next=(next+turn)%4)
if(map[zx+2*d[next][0]][zy+2*d[next][1]]==0)
{
map[zx+d[next][0]][zy+d[next][1]]=1;
search(x+d[next][0],y+d[next][1]);
}
return 0;
}
void Make_Maze(int x,int y)
{
int z1 = 0,z2;
for(z2=2*y+2; z1<=2*x+2; z1++)
{
map[z1][0]=1;
map[z1][z2]=1;
}
for(z1=0,z2=2*x+2; z1<=2*y+2; z1++)
{
map[0][z1]=1;
map[z2][z1]=1;
}
//地图边缘外的一圈初始化为0

map[1][2]=1;
map[2*x+1][2*y]=1;
//出口入口

srand((unsigned)time(NULL));
search(rand()%x+1,rand()%y+1);
}
int main()
{
// freopen("1.txt", "w", stdout);
int x=8,y=8,z1,z2; //x和y的值指定了这个要生成的迷宫的大小
Make_Maze(x,y);
for(z2=1; z2<=y*2+1; z2++)
{
for(z1=1; z1<=x*2+1; z1++)
if(map[z1][z2] == 1)
printf(" ");
else
printf("█");
if(z2<=y*2)
printf("\n");
}

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: