⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 递归法生成2d迷宫.cpp

📁 递归法生成2D迷宫,是想学习游戏编程的一个典型例子
💻 CPP
字号:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

#define MAZE_MAXWIDTH    80
#define MAZE_MAXHIGHT    26

char map[MAZE_MAXWIDTH+2][MAZE_MAXHIGHT+2];

void search(int x,int y)
{
    static int zadd[4][2]={0,1,1,0,0,-1,-1,0};
    int zx=x*2,zy=y*2,next,turn,i;
    map[zx][zy]=1;  //当前坐标置1
    turn=rand()%2? 1:3; //turn=1为顺时针3为逆时针
    for(i=0,next=rand()%4;i<4;i++,next=(next+turn)%4)
    {
        if(map[zx+2*zadd[next][0]][zy+2*zadd[next][1]]==0)
        {
            map[zx+zadd[next][0]][zy+zadd[next][1]]=1; //中间的路径置1
            search(x+zadd[next][0],y+zadd[next][1]);  //深搜下一个节点
        }
    }
}

void Make_Maze(int x,int y)
{
    int z1,z2;
    for(z1=0,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;  
    map[1][2]=1;  //置入口出口为1
    map[2*x+1][2*y]=1;
    srand((unsigned)time(NULL));
    search(rand()%x+1,rand()%y+1);  //从任意节点开始深搜
}

int main()
{
    int x=39,y=12,z1,z2;//maze size: 1<=x<=39 ; 1<=y< MAZE_MAXHIGHT/2
    Make_Maze(x,y);
    for(z2=1;z2<=y*2+1;z2++){    //迷宫图形输出
        for(z1=1;z1<=x*2+1;z1++)
            if(map[z1][z2]==0)putchar('|');else putchar(32);
        if(z2<=y*2)putchar(10);
    }
   system("pause");
    return 0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -