推箱子一关(熟悉的一关)



如果要改地图,只要改字符串部分、人与出口的位置和showmap那里的i和j就好了

#include
#include
using namespace std;

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

char A[9][10]={
{"#########"},
{"#i  #####"},
{"# oo#####"},
{"# o ###c#"},
{"### ###c#"},
{"###    c#"},
{"##   #  #"},
{"##   ####"},
{"#########"}
};

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

//恢复被删去的c
void renew()
{
 if(A[c1row][c1col]==' ')
 {
  A[c1row][c1col]='c';
 }
 if(A[c2row][c2col]==' ')
 {
  A[c2row][c2col]='c';
 }
 if(A[c3row][c3col]==' ')
 {
  A[c3row][c3col]='c';
 }
}

//显示地图
void showmap()
{
 int i,j;
 for(i=0;i<=8;i++)
 {
  for(j=0;j<=8;j++)
  {
   cout<   }
  cout<  }
}

//一步判断
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)
 {
  renew();
  showmap();
  cin>>n;
  step(n);
  if(iswin())
  {
   cout<<"You Win!"<    break;
  }
  system("cls");
 }
}

你可能感兴趣的:(推箱子一关(熟悉的一关))