博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C++实用编程——随机生成迷宫算法
阅读量:6200 次
发布时间:2019-06-21

本文共 3909 字,大约阅读时间需要 13 分钟。

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

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(" *******************************************\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-1<0) break; //路径不通或越界 go_up(&local_x,&local_y); break; case DOWN: if(path[local_x+1][local_y]!='t'&&path[local_x+1][local_y]!='o'||local_x+1>M-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-1<0) break; go_left(&local_x,&local_y); break; case RIGHT: if(path[local_x][local_y+1]!='t'&&path[local_x][local_y+1]!='o'||local_y+1>N-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;i
M*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&&m
0&&n

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

转载地址:http://xdxca.baihongyu.com/

你可能感兴趣的文章
制作cpprefernce.chm
查看>>
一个程序员的自白(庸人再扰)
查看>>
微信分享
查看>>
visual studio code新手入门
查看>>
去世父亲在儿子手机中复活,这可能是最温暖的一个AI
查看>>
如何管理linux开机自启服务
查看>>
nosql笔记2_早前的时候
查看>>
高质高效软件开发组织能力模型
查看>>
cloudstack 4管理器安装备忘
查看>>
linux运维新手参观机房后的心得体会
查看>>
.NET Micro Framework常见问题问答
查看>>
甘特图在生产计划中的应用
查看>>
思杰北京公司参观和交流
查看>>
【设计】客户端更新定义数据(Definition)的几个方案
查看>>
NTFS与FAT32文件系统
查看>>
PyQt5+python3+pycharm开发环境配置
查看>>
Linux内核最新的连续内存分配器(CMA)——避免预留大块内存
查看>>
新手用Linux做代理服务器 三招搞定
查看>>
Dynamic ARP Inspection(DAI)工作原理及测试
查看>>
危机!测试工程师真的要小心了
查看>>