• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

C++随机生成迷宫算法

c++ 搞代码 4年前 (2022-01-06) 34次浏览 已收录 0个评论

这篇文章主要为大家详细介绍了C++随机生成迷宫算法,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

本文实例为大家分享了C++随机生成迷宫的具体代码,供大家参考,具体内容如下

我们今天来做一个迷宫游戏。在其中有几个要领:

1.方向的控制

我们建立的迷宫是以坐标的形式出现的,越往上x坐标越小,越往左y坐标越小,这雨平面直角坐标系不同,要注意!

2.随机生成算法:

 void init_maze(void); //初始化迷宫 void gotoxy(int x, int y); //移动光标 void path_up(int *x, int *y); //上构路径 void path_down(int *x, int *y); //下构路径 void path_left(int *x, int *y); //左构路径 void path_right(int *x, int *y); //右构路径 void setxy(int x, int y); //指定位打通路径 void path_local(int x, int y); //本置路径

这是我们需要的函数,主要功能呢在代码中有讲到。如果大家自己在编程时需要自己生成迷宫,可以借鉴一下。

3.代码

 #include #include #include #include #include #include #include  using namespace std; #define UP 72 #define DOWN 80 #define LEFT 75 #define RIGHT 77 #define M 40 //迷宫长度 #define N 82 //迷宫宽度 char maze[M/2][N/2]; //定义迷宫数组 char path[M-1][N-1]; //定义路径数组 void setview(void); //设置控制台窗口信息 int menu_maze(void); //主目录 void startgame(void); //开始游戏 void init_maze(void); //初始化迷宫 void gotoxy(int x, int y); //移动光标 void path_up(int *x, int *y); //上构路径 void path_down(int *x, int *y); //下构路径 void path_left(int *x, int *y); //左构路径 void path_right(int *x, int *y); //右构路径 void setxy(int x, int y); //指定位打通路径 void path_local(int x, int y); //本置路径 void go_up(int *x,int *y); //向上移动 void go_down(int *x,int *y); //向下移动 void go_left(int *x,int *y); //向左移动 void go_right(int *x,int *y); //向右移动 void HideCursor(void); //隐藏光标 void win(void); int T; int F; int m; int n; int x; int target; int flag; int local_x; int local_y; int main() { setview(); while(1) { switch(menu_maze()) { case 49: system("cls"); startgame(); continue; case 50:exit(0); } } } void setview() { HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE); // 获取标准输出设备句柄 COORD size = {N*2+167, M*2+43}; SetConsoleScreenBufferSize(hOut,size); //设置控制台窗口缓冲区大小 SMALL_RECT rc = {0,0,167,43}; SetConsoleWindowInfo(hOut,true ,&rc); //设置窗口位置和大小 SetConsoleTitle("迷宫"); //设置窗口标题 HideCursor(); //隐藏光标 } int menu_maze(void) { char c; while(!(c>48&&c<51)) { system("cls"); printf("\n\n\n\n\n\n\n\n"); printf(" ………………^欢迎使用DOS迷宫游戏^……………\n"); printf(" *******************************************\n"); printf(" **************** 1.开始游戏****************\n"); printf(" **************** 2.退出游戏****************\n"); printf(" *******************************************

来源gaodai.ma#com搞##代!^码@网

\n"); c=getch(); } return c; } void startgame() { char key; local_x=0; local_y=0; system("cls"); init_maze(); gotoxy(2,2); printf(""); while(path[M-2][N-2]!='o') { key=getch(); if(key==-32) { key=getch(); switch(key) { case UP: if(path[local_x-1][local_y]!='t'&&path[local_x-1][local_y]!='o'||local_x-1M-2) break; go_down(&local_x,&local_y); break; case LEFT: if(path[local_x][local_y-1]!='t'&&path[local_x][local_y-1]!='o'||local_y-1N-2) break; go_right(&local_x,&local_y); break; } } } system("cls"); win(); } void init_maze() { int i,j; T=1; F=1; m=0; n=0; x=0; flag=0; srand((unsigned)time(NULL)); for(i=0;iM*N/4) { x=0; if(m==0&&n==0&&maze[m][n+1]==maze[0][0]&&maze[m+1][n]==maze[0][0]) T=0;//初始位置死路 if(m==0&&n==N/2-1&&maze[m][n-1]==maze[0][0]&&maze[m+1][n]==maze[0][0]) T=0;//右上角死路 if(m==M/2-1&&n==0&&maze[m][n+1]==maze[0][0]&&maze[m-1][n]==maze[0][0]) T=0;//左下角死路 if(m==M/2-1&&n==N/2-1&&maze[m][n-1]==maze[0][0]&&maze[m-1][n]==maze[0][0]) T=0;//终点死路 if(m==0&&n!=0&&n!=N/2-1&&maze[m][n-1]==maze[0][0]&&maze[m][n+1]==maze[0][0]&&maze[m+1][n]==maze[0][0]) T=0;//第一行死路 if(m!=0&&m!=M/2-1&&n==0&&maze[m-1][n]==maze[0][0]&&maze[m][n+1]==maze[0][0]&&maze[m+1][n]==maze[0][0]) T=0;//第一列死路 if(m!=0&&m!=M/2-1&&n==N/2-1&&maze[m-1][n]==maze[0][0]&&maze[m][n-1]==maze[0][0]&&maze[m+1][n]==maze[0][0]) T=0;//最后一列死路 if(m==M/2-1&&n!=0&&n!=N/2-1&&maze[m-1][n]==maze[0][0]&&maze[m][n+1]==maze[0][0]&&maze[m][n-1]==maze[0][0]) T=0;//最后一行死路 if(m>0&&m0&&n

怎么样,还是蛮简单的吧?

以上就是C++随机生成迷宫算法的详细内容,更多请关注gaodaima搞代码网其它相关文章!


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:C++随机生成迷宫算法

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址