C++實(shí)現(xiàn)推箱子小項(xiàng)目
更新時(shí)間:2021年08月02日 11:45:28 作者:王也枉不了
這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)推箱子小項(xiàng)目,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
本文實(shí)例為大家分享了C++實(shí)現(xiàn)推箱子小項(xiàng)目的具體代碼,供大家參考,具體內(nèi)容如下
代碼:
#include <bits/stdc++.h> #include<conio.h> using namespace std; const int MAXN =10; class GM { int x=1,y=1; //x縱坐標(biāo) ,y橫坐標(biāo) int count =0; public: char map[MAXN][MAXN]; GM(); int RUN(); int check(int x1,int y1,int t,int C);//檢查 void Display(); //打印 void Show(); void Start(); }; void GM::Start() { while(1) { Show(); int h; cin>>h; if(h==521) { Display(); while(1) { int h=RUN(); if(h==-1){system("cls"); cout<<"I LOVE YOU!"; system("pause"); exit(0); } else if(h==4) { system("cls"); GM k; k.Start(); } else Display(); } } else {system("cls"); cout<<"輸錯(cuò)了再試一次(521)"; } } } void GM::Show() { cout<<"__________________________"<<endl; cout<<"| WXK&&WSN(共1關(guān)) |"<<endl; cout<<"| 游戲規(guī)則: |"<<endl; cout<<"| &:人 O:箱子 |"<<endl; cout<<"| H:墻 *:目的地 |"<<endl; cout<<"| 操作說明 Q:退出 |"<<endl; cout<<"| W:上 S:下 |"<<endl; cout<<"| D:右 A:左 |"<<endl; cout<<"| 開始輸入:521 |"<<endl; cout<<"|_________________________|"<<endl; } void GM:: Display() //打印 { system("cls"); cout<<"Count:"<<count<<"/ 2"<<endl; for(int i=0;i<10;i++) { for(int j=0; j<10;j++) if(map[i][j]!='0') cout<<map[i][j]; else cout<<" "; cout<<endl; } } GM::GM() //初始化地圖 { fill(map[0],map[0]+MAXN*MAXN,'0'); for(int i=0;i<MAXN;i++) { map[0][i]='H'; map[i][0]='H'; map[MAXN-1][i]='H'; map[i][MAXN-1]='H'; } map[2][2]='O'; map[6][2]='O'; map[1][1]='P'; map[1][3]='H'; map[2][3]='H'; map[3][3]='H'; map[2][5]='H'; map[6][4]='H'; map[5][4]='H'; map[7][4]='H'; map[3][5]='H'; map[3][6]='H'; map[3][8]='H'; map[4][8]='H'; map[6][5]='*'; } int GM::check(int x1,int y1,int t,int L) { int M=0,N=0; if(t==1) { M=L; N=0; } else if(t==-1) { M=0; N=L; } if(map[x1][y1]=='H'||(map[x1][y1]=='O'&&(map[x1-M][y1+N]=='H'||map[x1-M][y1+N]=='O')))//有箱子但是會(huì)被主檔和直接是墻 return -1; else if(map[x1][y1]=='O'&&map[x1-M][y1+N]!='H')//當(dāng)有箱子且不會(huì)被墻檔 { if(map[x1-M][y1+N]=='*') return 3; return 1; } else if(map[x1][y1]!='H'&&map[x1][y1]!='*')return 2; } int GM::RUN() { char ch =getch(); int t =1,L=1;//t判斷上下還是左右,L判斷加減 if(ch =='a'||ch=='d'||ch=='A'||ch=='D')t=-1; if(ch=='a'||ch=='s'||ch=='A'||ch=='S')L=-1; if(ch=='Q'||ch=='q')return 4; if(t==1&&check(x-L,y,t,L)==1)//往上或下有箱子了話 { map[x][y]='0'; x-=L; map[x][y]='P'; map[x-L][y]='O'; } else if(t==1&&check(x-L,y,t,L)==2)//往上或者往下能走了話 { map[x][y]='0'; x-=L; map[x][y]='P'; } else if(t==1&&check(x-L,y,t,L)==3) { map[x][y]='0'; x-=L; map[x][y]='P'; if(count==2) return -1; } else if(t==-1&&check(x,y+L,t,L)==1)//往左或右有箱子了話 { map[x][y]='0'; y+=L; map[x][y]='P'; map[x][y+L]='O'; } else if(t==-1&&check(x,y+L,t,L)==2)//往左或者往右能走了話 { map[x][y]='0'; y+=L; map[x][y]='P'; } else if(t==-1&&check(x,y+L,t,L)==3) { map[x][y]='0'; y+=L; map[x][y]='P'; count++; if(count==2) return -1; } } int main() { system("color E4"); GM k; k.Start(); }
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
C 標(biāo)準(zhǔn)I/O庫的粗略實(shí)現(xiàn)教程
下面小編就為大家分享一篇C 標(biāo)準(zhǔn)I/O庫的粗略實(shí)現(xiàn)教程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2017-12-12C++ 實(shí)現(xiàn)即時(shí)通信的示例代碼(直接運(yùn)行)
本文主要介紹了C++ 實(shí)現(xiàn)即時(shí)通信的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-05-05C++小游戲教程之猜數(shù)游戲的實(shí)現(xiàn)
這篇文章主要和大家詳細(xì)介紹如何利用C++做一個(gè)簡(jiǎn)易的猜數(shù)游戲,分為用戶猜數(shù)和系統(tǒng)猜數(shù)。文中的示例代碼講解詳細(xì) ,感興趣的小伙伴可以嘗試一下2022-11-11Visual Studio Code配置C、C++環(huán)境并編寫運(yùn)行的方法
這篇文章主要介紹了Visual Studio Code配置C、C++環(huán)境并編寫運(yùn)行的方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-08-08OpenCV鼠標(biāo)繪制矩形和截取矩形區(qū)域圖像
這篇文章主要為大家詳細(xì)介紹了OpenCV鼠標(biāo)繪制矩形和截取矩形區(qū)域圖像,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-01-01深入探討C語言中局部變量與全局變量在內(nèi)存中的存放位置
本篇文章是對(duì)在C語言中局部變量與全局變量在內(nèi)存中的存放位置進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-05-05