本文實例分享了C++設計的一個可以調(diào)整大小的迷宮游戲,給定迷宮的入口。如果存在出口,程序能夠顯示行走的路徑,并最終到達出口,并輸出“成功走出迷宮”;如果不存在出口,程序也能夠顯示行走的過程,并最終回退到入口,并輸出“回退到入口”。
成都創(chuàng)新互聯(lián)是一家集網(wǎng)站建設,盧龍企業(yè)網(wǎng)站建設,盧龍品牌網(wǎng)站建設,網(wǎng)站定制,盧龍網(wǎng)站建設報價,網(wǎng)絡營銷,網(wǎng)絡優(yōu)化,盧龍網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強企業(yè)競爭力??沙浞譂M足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時我們時刻保持專業(yè)、時尚、前沿,時刻以成就客戶成長自我,堅持不斷學習、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實用型網(wǎng)站。
//這是一個迷宮游戲 #include<iostream> #include<ctime> #include<cstdlib>/*用于生成隨機數(shù),形成隨機變化的迷宮*/ #include<iomanip>/*用于輸出格式控制,使得生成的迷宮外觀規(guī)則*/ using namespace std; /*生成迷宮的函數(shù)mazegenerator*/ char*mazegenerator(int m,int n) { int i,j,k;/*計數(shù)器*/ char *p=new char[m*n];/*用長度為m*n的數(shù)組存放mxn大小的迷宮*/ srand(int(time(0)));/*用于生成隨機數(shù)*/ if(m<10||n<10)//階數(shù)小的時候密一點,增加趣味 for(i=0;i<m*n;i++) { if(rand()%3==0)p[i]='.';//隨機數(shù)為三的倍數(shù)時,把迷宮中該點定義為通路 else p[i]='#'; } else for(i=0;i<m*n;i++) { if(rand()%2==0)p[i]='.';/*隨機數(shù)為偶數(shù)時,把迷宮中該點定義為通路*/ else p[i]='#'; } /*把左邊界和上邊界全部封住,只留一個入口,只能從右邊界和下邊界走出, 讓走出迷宮更有挑戰(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'; /*迷宮是隨機的,需要構(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是那個點在數(shù)組中的序號*/ for(i=0;i<n;i++) { for(j=0;j<m;j++) cout<<setw(2)<<p[i*m+j];/*每個字符占兩個使得迷宮方正*/ cout<<endl; } } /*走迷宮函數(shù)mazetraverse*/ void mazetraverse(char*p,int m,int n) { int x,y,z;/*y是當前位置,x是前一步,z是后一步,t用于輸入繼續(xù)走迷宮的指令*/ /*初始化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)))/*到達邊界之前執(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; /*右不為'.'時,向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實現(xiàn)當前位置的移動*/ x=y; y=z; } } int main() { int m,n;/*n是迷宮的階數(shù),由于輸出窗口大小的限制, n不能大于每行所能顯示的字符個數(shù)*/ 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; /*可以進行多組數(shù)據(jù)的測試*/ 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<<"如要嘗試新的迷宮,請輸入新迷宮的階數(shù)n(n>2),\n否則,按ctrl+z,再按enter結(jié)束"<<endl; } }
以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持創(chuàng)新互聯(lián)。
文章標題:迷宮游戲控制臺版C++代碼
瀏覽地址:http://jinyejixie.com/article24/jjigje.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供Google、網(wǎng)站維護、微信小程序、網(wǎng)站排名、網(wǎng)頁設計公司、網(wǎng)站內(nèi)鏈
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)