虚位以待(AD)
虚位以待(AD)
首页 > 软件编程 > C/C++编程 > 迷宫游戏控制台版C++代码

迷宫游戏控制台版C++代码
类别:C/C++编程   作者:码皇   来源:互联网   点击:

这篇文章主要为大家详细介绍了迷宫游戏控制台版C++代码,可以调整大小的迷宫游戏,给定迷宫的入口,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

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

    //这是一个迷宫游戏#include<iostream>#include<ctime>#include<cstdlib>/*用于生成随机数,形成随机变化的迷宫*/#include<iomanip>/*用于输出格式控制,使得生成的迷宫外观规则*/using namespace std;
    /*生成迷宫的函数mazegenerator*/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]='#';
    /*接下来把前3阶构造为T字型*/ p[0]=p[1]=p[2]=p[2*m]=p[2*m+2]='#';
    p[m+1]=p[m+2]=p[2*m+1]='.';
    /*迷宫入口定义为'x'*/ 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;
    }
    }
    /*走迷宫函数mazetraverse*/void mazetraverse(char*p,int m,int n){
    int x,y,z;
    /*y是当前位置,x是前一步,z是后一步,t用于输入继续走迷宫的指令*/ /*初始化x,y,即迷宫入口的位置*/ x=m;
    y=m+1;
    p[y]='x';
    /*这是迷宫的第一步*/ cout<<"请按回车键移动:";
    /*让用户控制走迷宫的进程*/ cin.get();
    cout<<endl;
    showmaze(p,m,n);
    /*输出走后的迷宫*/ cout<<endl;
    cout<<"请按回车键移动: ";
    cin.get();
    /*关键在于用x,y确定z的值*/ 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;
    /*右不为'.'时,向y的前方走*/ if(p[z]=='#') {
    /*判断y的前方,如果前为'.',则向前走*/ 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';
    /*最后都要让z的位置为'x',表示走过的痕迹*/ showmaze(p,m,n);
    cout<<endl;
    cout<<"请按回车键移动: ";
    cin.get();
    cout<<endl;
    /*替换x,y实现当前位置的移动*/ x=y;
    y=z;
    }
    }
    int main(){
    int m,n;
    /*n是迷宫的阶数,由于输出窗口大小的限制, 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;
    }
    }

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

您可能感兴趣的文章:

  • C++实现简单走迷宫的代码
  • C++控制台实现随机生成路径迷宫游戏
  • C++基于prim实现迷宫生成
  • C++ 自定义栈实现迷宫求解
  • C++ 迷宫游戏实现代码
  • 使用C/C++语言生成一个随机迷宫游戏
  • C++实现随机生成迷宫地牢
  • C++实现迷宫算法实例解析
  • C++利用循环和栈实现走迷宫
相关热词搜索: C++ 迷宫游戏