本程序是在控制台下随机生成迷宫路径的一个C++程序,可以通过修改宏定义 M 和 N 的值来修改迷宫的长度和宽度,运行程序后 按1开始游戏 按2退出游戏,游戏入口在左上角,出口在右下角,人物(星星)到达右下角出口提示成功闯关。
创新互联于2013年创立,先为陵川等服务建站,陵川等地企业,进行企业商务咨询服务。为陵川企业网站制作PC+手机+微官网三网同步一站式服务解决您的所有建站问题。
#include#include #include #include #include #include #include #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; void 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
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持创新互联。