推箱子第一关(存在bug)

时间:2023-02-24 10:27:51


人和箱子走过c会使c消失,但不影响游戏胜利的判断。滑稽.jpg

#include<iostream>
#include<windows.h>
using namespace std;

int irow=1,icol=2;//人的位置
int c1row=4,c1col=1,c2row=5,c2col=1,c3row=6,c3col=1;//出口位置

char A[8][9]={
{"########"},
{"##i ####"},
{"## o  ##"},
{"### # ##"},
{"#c# #  #"},
{"#co  # #"},
{"#c   o #"},
{"########"}
};

void showmap();
void step(char n);
int iswin();

//显示地图
void showmap()
{
 int i,j;
 for(i=0;i<=7;i++)
 {
  for(j=0;j<=7;j++)
  {
   cout<<A[i][j];
  }
  cout<<endl;
 }
}

//一步判断
void step(char n)
{
 int r,c;
 r=irow;c=icol;
 if(n=='w')
 {
  r=r-1;
 }
 else if(n=='a')
 {
  c=c-1;
 }
 else if(n=='d')
 {
  c=c+1;
 }
 else if(n=='s')
 {
  r=r+1;
 }
 if(A[r][c]==' '||A[r][c]=='c')
 {
  A[irow][icol]=' ';
  A[r][c]='i';
  irow=r;icol=c;
 }
 else if(A[r][c]=='o')
 {
  if(A[2*r-irow][2*c-icol]==' '||A[2*r-irow][2*c-icol]=='c')  //人隔着箱子正对的地方
  {
   A[irow][icol]=' ';
   A[r][c]='i';
   A[2*r-irow][2*c-icol]='o';
   irow=r;icol=c;
  }
 }
}

//胜利
int iswin()
{
 if(A[c1row][c1col]=='o'&&A[c2row][c2col]=='o'&&A[c3row][c3col]=='o')
 {
  return 1;
 }
 return 0;
}

//主控
int main()
{
 char n;
 while(1)
 {
  showmap();
  cin>>n;
  step(n);
  if(iswin())
  {
   cout<<"You Win!"<<endl;
   break;
  }
  
  system("cls");
 }
}