C++实现推箱子小项目

本文实例为大家分享了C++实现推箱子小项目的具体代码,供大家参考,具体内容如下

代码:

#include <bits/stdc++.h>#include<conio.h>using namespace std;const int MAXN =10;class GM{ int x=1,y=1; //x纵坐标 ,y横坐标  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<<"输错了再试一次(521)";  }  } } void GM::Show(){cout<<"__________________________"<<endl;cout<<"|       WXK&&WSN(共1关)   |"<<endl;cout<<"|    游戏规则:           |"<<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')))//有箱子但是会被主档和直接是墙return -1;else if(map[x1][y1]=='O'&&map[x1-M][y1+N]!='H')//当有箱子且不会被墙档{ 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();}

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

你写PPT时,阿拉斯加的鳕鱼正跃出水面,

C++实现推箱子小项目

相关文章:

你感兴趣的文章:

标签云: