欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

迷宮游戲控制臺(tái)版C++代碼

 更新時(shí)間:2020年03月19日 15:20:33   作者:夢(mèng)里茶  
這篇文章主要為大家詳細(xì)介紹了迷宮游戲控制臺(tái)版C++代碼,可以調(diào)整大小的迷宮游戲,給定迷宮的入口,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

本文實(shí)例分享了C++設(shè)計(jì)的一個(gè)可以調(diào)整大小的迷宮游戲,給定迷宮的入口。如果存在出口,程序能夠顯示行走的路徑,并最終到達(dá)出口,并輸出“成功走出迷宮”;如果不存在出口,程序也能夠顯示行走的過程,并最終回退到入口,并輸出“回退到入口”。

//這是一個(gè)迷宮游戲
#include<iostream>
#include<ctime>
#include<cstdlib>/*用于生成隨機(jī)數(shù),形成隨機(jī)變化的迷宮*/
#include<iomanip>/*用于輸出格式控制,使得生成的迷宮外觀規(guī)則*/
using namespace std;
/*生成迷宮的函數(shù)mazegenerator*/
char*mazegenerator(int m,int n)
{
 int i,j,k;/*計(jì)數(shù)器*/
 char *p=new char[m*n];/*用長(zhǎng)度為m*n的數(shù)組存放mxn大小的迷宮*/
 srand(int(time(0)));/*用于生成隨機(jī)數(shù)*/
 if(m<10||n<10)//階數(shù)小的時(shí)候密一點(diǎn),增加趣味
 for(i=0;i<m*n;i++)
 {
 if(rand()%3==0)p[i]='.';//隨機(jī)數(shù)為三的倍數(shù)時(shí),把迷宮中該點(diǎn)定義為通路
 else p[i]='#';
 }
 else
 for(i=0;i<m*n;i++)
 {
 if(rand()%2==0)p[i]='.';/*隨機(jī)數(shù)為偶數(shù)時(shí),把迷宮中該點(diǎn)定義為通路*/
 else p[i]='#';
 }
 /*把左邊界和上邊界全部封住,只留一個(gè)入口,只能從右邊界和下邊界走出,
 讓走出迷宮更有挑戰(zhàn)性*/
 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階構(gòu)造為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';
 /*迷宮是隨機(jī)的,需要構(gòu)造一條通路*/
 /*這是一條每三格轉(zhuǎn)一次的通路*/
 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是那個(gè)點(diǎn)在數(shù)組中的序號(hào)*/
 for(i=0;i<n;i++)
 {
 for(j=0;j<m;j++)
 cout<<setw(2)<<p[i*m+j];/*每個(gè)字符占兩個(gè)使得迷宮方正*/
 cout<<endl;
 }
}
/*走迷宮函數(shù)mazetraverse*/
void mazetraverse(char*p,int m,int n)
{
 int x,y,z;/*y是當(dāng)前位置,x是前一步,z是后一步,t用于輸入繼續(xù)走迷宮的指令*/
 /*初始化x,y,即迷宮入口的位置*/
 x=m;
 y=m+1;
 p[y]='x';/*這是迷宮的第一步*/
 cout<<"請(qǐng)按回車鍵移動(dòng):";/*讓用戶控制走迷宮的進(jìn)程*/
 cin.get();
 cout<<endl;
 showmaze(p,m,n);/*輸出走后的迷宮*/
 cout<<endl;
 cout<<"請(qǐng)按回車鍵移動(dòng): ";
 cin.get();
 /*關(guān)鍵在于用x,y確定z的值*/
 while(!((y>m*(n-1))||(((y+1)%m)==0)))/*到達(dá)邊界之前執(zhí)行循環(huán)走迷宮*/
 {
 /*判斷右的方向,如果右為'.',則向右走*/
 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;
 /*右不為'.'時(shí),向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<<"請(qǐng)按回車鍵移動(dòng): ";
 cin.get();
 cout<<endl;
 /*替換x,y實(shí)現(xiàn)當(dāng)前位置的移動(dòng)*/
 x=y;
 y=z;
 }
}
int main()
{
 int m,n;/*n是迷宮的階數(shù),由于輸出窗口大小的限制,
 n不能大于每行所能顯示的字符個(gè)數(shù)*/
 cout<<" 陳偉航的迷宮游戲\n我的迷宮可是很整潔的哦!^_^\n"<<endl;
 cout<<"這是一個(gè)可任意選擇大小的迷宮,"<<endl;
 cout<<"每次生成的迷宮都不同。\n"<<endl;
 cout<<"因?yàn)槠聊灰淮巫疃囡@示80個(gè)字符,\n這里每個(gè)字符又占兩格,"<<endl
 <<"所以輸入超過40階就不好看啦,\n雖然它還是對(duì)的。哈哈\n"<<endl;
 cout<<"請(qǐng)依次輸入迷宮的寬度m和高度n(m>2,n>2):"<<endl;
 /*可以進(jìn)行多組數(shù)據(jù)的測(cè)試*/
 while(cin>>m>>n)
 {
 char*a=mazegenerator(m,n);
 showmaze(a,m,n);
 cout<<endl;
 cout<<"萬里長(zhǎng)征第一步:\n"<<endl;
 mazetraverse(a,m,n);
 cout<<"恭喜你!你已成功走出迷宮!"<<endl<<endl;
 cout<<"如要嘗試新的迷宮,請(qǐng)輸入新迷宮的階數(shù)n(n>2),\n否則,按ctrl+z,再按enter結(jié)束"<<endl;
 }
}

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • C++中vector操作方式詳解(多種方式)

    C++中vector操作方式詳解(多種方式)

    這篇文章主要介紹了C++中vector操作方式詳解(多種方式),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-02-02
  • C語言實(shí)現(xiàn)超市信息管理系統(tǒng)課程設(shè)計(jì)

    C語言實(shí)現(xiàn)超市信息管理系統(tǒng)課程設(shè)計(jì)

    這篇文章主要為大家詳細(xì)介紹了C語言實(shí)現(xiàn)超市信息管理系統(tǒng)課程設(shè)計(jì),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • 詳解C語言中二分查找的運(yùn)用技巧

    詳解C語言中二分查找的運(yùn)用技巧

    本文主要介紹了二分查找在實(shí)際中的應(yīng)用,通過分析幾個(gè)應(yīng)用二分查找的實(shí)例,總結(jié)下能使用二分查找算法的一些共同點(diǎn),感興趣的可以了解一下
    2022-03-03
  • vscode+leetcode環(huán)境配置方法

    vscode+leetcode環(huán)境配置方法

    這篇文章主要介紹了vscode+leetcode環(huán)境配置,本文通過實(shí)例圖文相結(jié)合給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-03-03
  • 擴(kuò)展KMP算法(Extend KMP)

    擴(kuò)展KMP算法(Extend KMP)

    我們這里說的KMP不是拿來放電影的(雖然我很喜歡這個(gè)軟件),而是一種算法。KMP算法是拿來處理字符串匹配的。今天我們談到的是對(duì)KMP算法的拓展
    2014-08-08
  • C++基礎(chǔ)入門教程(一):基礎(chǔ)知識(shí)大雜燴

    C++基礎(chǔ)入門教程(一):基礎(chǔ)知識(shí)大雜燴

    這篇文章主要介紹了C++基礎(chǔ)入門教程(一):基礎(chǔ)知識(shí)大雜燴,本文講解了注釋、頭文件、命名空間等內(nèi)容,需要的朋友可以參考下
    2014-11-11
  • C語言 共用體(Union)詳解及示例代碼

    C語言 共用體(Union)詳解及示例代碼

    本文主要介紹C語言 共用體,這里整理了相關(guān)資料及示例代碼,幫助大家學(xué)習(xí)理解此部分的知識(shí),有興趣的小伙伴可以參考下
    2016-08-08
  • C/C++位操作實(shí)例總結(jié)

    C/C++位操作實(shí)例總結(jié)

    這篇文章主要介紹了C/C++位操作實(shí)例總結(jié),是C/C++程序設(shè)計(jì)中很重要的概念,需要的朋友可以參考下
    2014-08-08
  • C++ STL中的常用遍歷算法分享

    C++ STL中的常用遍歷算法分享

    這篇文章主要為大家詳細(xì)介紹了C++ STL中兩個(gè)常用的遍歷算法,文中的示例代碼講解詳細(xì),具有一定的學(xué)習(xí)與借鑒價(jià)值,感興趣的小伙伴可以參考一下
    2022-12-12
  • C++ STL中vector容器的使用

    C++ STL中vector容器的使用

    這篇文章主要為大家詳細(xì)介紹了C++ vector容器的使用,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-03-03

最新評(píng)論