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();

}

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

以上是 C++实现推箱子小项目 的全部内容, 来源链接: utcz.com/p/246708.html

回到顶部