随机迷宫

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

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

时间: 2024-08-30 14:12:31

随机迷宫的相关文章

利用纯JS和HTML Canvas生成随机迷宫过程中产生的有趣的事情

上效果图: #先看生成随机迷宫的代码吧↓ 1 <html> 2 <head> 3 <title>生成随机迷宫v1.0</title> 4 </head> 5 <body> 6 <center style="margin-top: 20px;"> 7 <canvas id="myCan1" title="作者:谢辉"></canvas> 8

随机Prim法创建随机迷宫(C#实现)

因为这两天想参加一个比赛,所以就在上网找素材,刚好看到了迷宫生成,就决定拿这个开刀了. 参考的原文地址为(来源页面) 源地址中是使用AS实现的,没学过AS,所以直接不会运行,于是就自己根据原文的概念进行了模(chao)仿(xi). 废话说完了,现在来说一下随机Prim法的原理: 1.建立两个数组,一个是用于存储地图的二维数组α,另一个是用于存储待处理的墙的数组β. 2.将α的所有方格全部初始化为墙. 3.选定起点,并将该位置的墙变为路,将其四周的四块置入β数组中(出界的直接筛掉,就不说了). 4

【队列应用一】随机迷宫|随机起点终点*最短路径算法

1 #include<iostream> 2 #include<queue> 3 #include<windows.h> 4 #include<time.h> 5 using namespace std; 6 struct position //位置 7 { 8 int row; 9 int col; 10 }; 11 void display(int size,int **grid); 12 13 int main() 14 { 15 16 /******

Unity_Dungeonize 随机生成迷宫

本文对随机生成迷宫的实现思路进行记录,其作用在于为游戏过程提供随机性以及节省开发周期,下面是Dungeonize的结构 随机迷宫的生成主要包括几个阶段 1.生成房间体结构,为墙体,自定义房间,自定义物体生成平台 1 for (var i = 0; i < room_count; i++) { 2 Room room = new Room (); 3 if (rooms.Count == 0) { 4 //初始房间生成玩家和任务事件监听 5 room.x = (int)Mathf.Floor (m

AI-随机迷宫&amp;迷宫求解

本文记录了,人工智能中简单的搜索策略中的路径搜索策略中的A*算法,来实现迷宫寻路的问题.(这只是一次本人的课外作业) 完整的程序源码已经发送到我的Git.这里只记录了我的思路和感想以及收获. 产生随机迷宫 迷宫求解没有迷宫怎么可以呢.而本人是个懒人,每次都要手动输入迷宫,重复性的工作让我很不爽.你可以在程序中用数组定义一个迷宫啊,有强迫症的我,怎么可以这样随便的要求自己的程序呢.及时求解算法的出来了,但是测试数据有限,还是让我很不爽的,所以,干脆先花一些时间,写个随机迷宫的产生吧. 遇事先搜索,

[游戏开发-学习笔记]菜鸟慢慢飞(七)-&#160;迷宫更新

随机迷宫,留下一个问题: "Quaternion这个API看不懂,先放到学习清单中,如果会这个,应该就可以横墙,竖墙只用一个." 查看了下官方API. 只用一面墙,效果是一样的. 更新一下代码: using UnityEngine; /// <summary> /// 初始化迷宫 /// </summary> public class InitializeMazerev1 : MonoBehaviour { public GameObject WallHS; p

C语言编写的迷宫小游戏

C语言编写的迷宫小游戏 #include <graphics.h> #include <stdlib.h> #include <stdio.h> #include <conio.h> #include <dos.h> #define N 20/*迷宫的大小,可改变*/ int  oldmap[N][N];/*递归用的数组,用全局变量节约时间*/ int  yes=0;/*yes是判断是否找到路的标志,1找到,0没找到*/ int  way[100

【小白学游戏常用算法】一、随机迷宫算法

现在的很多游戏中的地图一般采用格子的方式,虽然在表面地图上无法看到实际的格子,但是在地图的结构中专门有一个逻辑层,这个层和地图大小相等,划出很多小的格子,然后在可以通过的地方使用0表示,在有障碍的且不能通过的地方用1或者其他数字表示(如图所示).有了这个逻辑层之后,实际上自动寻路就转换成了如何在一个二维数组中找出一条从逻辑值为0的地点移动到目标的路径.在寻路之前,我们首先要随机生成这些地图.     游戏中地图  二维数组逻辑层 本质上,地图的障碍逻辑层是由一个二维数组保存的.障碍标记在二维数组

小项目特供 简易迷宫(基于Java)

明天返校,于是昨天和今天简单熟系了一下JAVA的GUI,做了一个简易的迷宫小游戏(暂时没有时间实现随机迷宫及多关卡,仅供学习) 源码及运行文件(提供JRE8):简易迷宫  访问密码 8dd8 小项目特供 简易迷宫(基于Java)