最近写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; }
版权声明:本文为博主原创文章,未经博主允许不得转载。
原文地址:http://blog.csdn.net/fk5431/article/details/47151275