迷宫游戏控制台版C++代码

时间:2021-05-19

本文实例分享了C++设计的一个可以调整大小的迷宫游戏,给定迷宫的入口。如果存在出口,程序能够显示行走的路径,并最终到达出口,并输出“成功走出迷宫”;如果不存在出口,程序也能够显示行走的过程,并最终回退到入口,并输出“回退到入口”。

//这是一个迷宫游戏#include<iostream>#include<ctime>#include<cstdlib>#include<iomanip>using namespace std;char*mazegenerator(int m,int n){ int i,j,k; char *p=new char[m*n];/*用长度为m*n的数组存放mxn大小的迷宫*/ srand(int(time(0))); if(m<10||n<10)//阶数小的时候密一点,增加趣味 for(i=0;i<m*n;i++) { if(rand()%3==0)p[i]='.';//随机数为三的倍数时,把迷宫中该点定义为通路 else p[i]='#'; } else for(i=0;i<m*n;i++) { if(rand()%2==0)p[i]='.'; else p[i]='#'; } for(i=0;i<m;i++) p[i]='#'; for(i=0;i<m*n;i+=m) p[i]='#'; for(i=m-1;i<m*n;i+=m) p[i]='#'; for(i=m*(n-1);i<m*n;i++) p[i]='#'; p[0]=p[1]=p[2]=p[2*m]=p[2*m+2]='#'; p[m+1]=p[m+2]=p[2*m+1]='.'; p[m]='x'; for(j=3;j<m;j+=3) { for(k=0;k<3;k++) { i=(j-3)+k+1; if(i*m+j<m*n) p[i*m+j]='.'; } } for(i=4;i<m;i+=3) for(k=0;k<3;k++) { j=(i-3)+k+2; if(i*m+j<m*n) p[i*m+j]='.'; } return p;}void showmaze(char*p,int m,int n){ int i,j;/*i代表行,j代表列,i*n+j是那个点在数组中的序号*/ for(i=0;i<n;i++) { for(j=0;j<m;j++) cout<<setw(2)<<p[i*m+j]; cout<<endl; }}void mazetraverse(char*p,int m,int n){ int x,y,z; x=m; y=m+1; p[y]='x'; cout<<"请按回车键移动:"; cin.get(); cout<<endl; showmaze(p,m,n); cout<<endl; cout<<"请按回车键移动: "; cin.get(); while(!((y>m*(n-1))||(((y+1)%m)==0))) { if(y-x==1)z=y+m; if(y-x==m)z=y-1; if(y-x==-m)z=y+1; if(y-x==-1)z=y-m; if(p[z]=='#') { if(y-x==1)z=y+1; if(y-x==m)z=y+m; if(y-x==-m)z=y-m; if(y-x==-1)z=y-1; if(p[z]=='#') { if(y-x==1)z=y-m; if(y-x==m)z=y+1; if(y-x==-m)z=y-1; if(y-x==-1)z=y+m; if(p[z]=='#')z=x; } } p[z]='x'; showmaze(p,m,n); cout<<endl; cout<<"请按回车键移动: "; cin.get(); cout<<endl; x=y; y=z; }}int main(){ int m,n; cout<<" 陈伟航的迷宫游戏\n我的迷宫可是很整洁的哦!^_^\n"<<endl; cout<<"这是一个可任意选择大小的迷宫,"<<endl; cout<<"每次生成的迷宫都不同。\n"<<endl; cout<<"因为屏幕一次最多显示80个字符,\n这里每个字符又占两格,"<<endl <<"所以输入超过40阶就不好看啦,\n虽然它还是对的。哈哈\n"<<endl; cout<<"请依次输入迷宫的宽度m和高度n(m>2,n>2):"<<endl; while(cin>>m>>n) { char*a=mazegenerator(m,n); showmaze(a,m,n); cout<<endl; cout<<"万里长征第一步:\n"<<endl; mazetraverse(a,m,n); cout<<"恭喜你!你已成功走出迷宫!"<<endl<<endl; cout<<"如要尝试新的迷宫,请输入新迷宫的阶数n(n>2),\n否则,按ctrl+z,再按enter结束"<<endl; }}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。

相关文章