码迷,mamicode.com
首页 > 其他好文 > 详细

随机迷宫

时间:2015-07-30 16:57:57      阅读:139      评论:0      收藏:0      [点我收藏+]

标签:地图   算法   unity   随机迷宫   

最近写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;
}


版权声明:本文为博主原创文章,未经博主允许不得转载。

随机迷宫

标签:地图   算法   unity   随机迷宫   

原文地址:http://blog.csdn.net/fk5431/article/details/47151275

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!