C++控制台实现随机生成路径迷宫游戏
本程序是在控制台下随机生成迷宫路径的一个C++程序,可以通过修改宏定义M和N的值来修改迷宫的长度和宽度,运行程序后按1开始游戏按2退出游戏,游戏入口在左上角,出口在右下角,人物(星星)到达右下角出口提示成功闯关。
#include#include #include #include #include #include #include #defineUP72 #defineDOWN80 #defineLEFT75 #defineRIGHT77 #defineM40//迷宫长度 #defineN82//迷宫宽度 charmaze[M/2][N/2];//定义迷宫数组 charpath[M-1][N-1];//定义路径数组 voidsetview(void);//设置控制台窗口信息 intmenu_maze(void);//主目录 voidstartgame(void);//开始游戏 voidinit_maze(void);//初始化迷宫 voidgotoxy(intx,inty);//移动光标 voidpath_up(int*x,int*y);//上构路径 voidpath_down(int*x,int*y);//下构路径 voidpath_left(int*x,int*y);//左构路径 voidpath_right(int*x,int*y);//右构路径 voidsetxy(intx,inty);//指定位打通路径 voidpath_local(intx,inty);//本置路径 voidgo_up(int*x,int*y);//向上移动 voidgo_down(int*x,int*y);//向下移动 voidgo_left(int*x,int*y);//向左移动 voidgo_right(int*x,int*y);//向右移动 voidHideCursor(void);//隐藏光标 voidwin(void); intT; intF; intm; intn; intx; inttarget; intflag; intlocal_x; intlocal_y; voidmain() { setview(); while(1) { switch(menu_maze()) { case49: system("cls"); startgame(); continue; case50:exit(0); } } } voidsetview() { HANDLEhOut=GetStdHandle(STD_OUTPUT_HANDLE);//获取标准输出设备句柄 COORDsize={N*2+167,M*2+43}; SetConsoleScreenBufferSize(hOut,size);//设置控制台窗口缓冲区大小 SMALL_RECTrc={0,0,167,43}; SetConsoleWindowInfo(hOut,true,&rc);//设置窗口位置和大小 SetConsoleTitle("迷宫");//设置窗口标题 HideCursor();//隐藏光标 } intmenu_maze(void) { charc; 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(); } returnc; } voidstartgame() { charkey; 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) { caseUP: 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; caseDOWN: 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; caseLEFT: 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; caseRIGHT: 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(); } voidinit_maze() { inti,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 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。