#include<iostream>
#include<conio.h>
usingnamespace std;
//0空地 1墙 3目的地 4箱子 5人 7箱子在目的地 8人在目的地
int map[10][10] = {
{ 1, 1, 1, 1, 1, 1, 1, 1 ,1, 1},
{ 1, 1, 1, 1, 0, 0, 5, 0, 0, 1},
{ 1, 0, 0, 0, 0, 4, 0, 0, 0, 1},
{ 1, 1, 1, 0, 1, 0, 1, 1, 0, 1},
{ 1, 0, 0, 0, 1, 0, 1, 3, 1, 1},
{ 1, 0, 0, 0, 0, 0, 4, 3, 1, 1},
{ 1, 1, 0, 4, 0, 0, 0, 3, 1, 1},
{ 1, 1, 0, 1, 0, 1, 1, 1 ,1, 1},
{ 1, 1, 0, 4, 0, 0, 0, 3, 1, 1},
{ 1, 1, 1, 1, 1, 1, 1, 1 ,1, 1},};
void DrawMap()
{
for (int i = 0; i < 10; i++)
{
for (int j = 0;j < 10; j++)
{
switch(map[i][j])
{
case 0:
cout<<" ";
break;
case 1:
cout<<"■";
break;
case 3:
cout<<"☆";
break;
case 4:
cout<<"□";
break;
case 5:
cout<<"♀";
break;
case 7:
cout<<"★";
break;
case 8:
cout<<"♀";
break;
}
}
cout<<endl;
}
}
void PlayGame()
{
int r, c;//人的下标
for (int i = 0; i < 10; i++)
{
for (int j = 0;j < 10; j++)
{
if(map[i][j] == 5 || map[i][j] == 8)
{
r = i;
c = j;
}
}
}
char ch = getch(); //获取键盘
switch (ch)
{
case'W':
case'w':
case 72: //上72 下80 左75 右77 r c人的位置 r-1 c人前面的位置 r-2 c人的前面的前面
if (map[r-1][c ] == 0 || map[r- 1][c] == 3)//人的前面是空地或目的地
{
map[r - 1][c] += 5; //在人前面的位置+5
map[r][c] -= 5; //人走了 人原来的位置-5
}
elseif (map[r- 1][c] == 4 || map[r - 1][c] == 7) //人的前面是箱子
{
if (map[r- 2][c] == 0 || map[r - 2][c] == 3) //箱子的前面
{
map[r - 2][c] += 4;
map[r - 1][c] += 1;//-4+5
map[r][c] -= 5;
}
}
break;
case'S':
case's':
case 80:
if (map[r+ 1][c] == 0 || map[r + 1][c] == 3)//人的下面是空地或目的地
{
map[r + 1][c] += 5; //在人下面的位置+5
map[r][c] -= 5; //人走了 人原来的位置-5
}
elseif (map[r+ 1][c] == 4 || map[r + 1][c] == 7) //人的下面是箱子
{
if (map[r+ 2][c] == 0 || map[r + 2][c] == 3) //箱子的下面
{
map[r + 2][c] += 4;
map[r + 1][c] += 1;
map[r][c] -= 5; //5 8
}
}
break;
case'A':
case'a':
case 75:
if(map[r][c - 1] == 0 || map[r][c - 1] == 3)//人的前面是空地
{
map[r][c - 1] += 5; //在人前面的位置+5
map[r][c] -= 5; //人走了 人原来的位置-5
}
elseif(map[r][c - 1] == 4 || map[r][c - 1] == 7) //人的前面是箱子
{
if(map[r][c - 2] == 0 || map[r][c - 2] == 3) //箱子的前面
{
map[r][c - 2] += 4;
map[r][c - 1] += 1;
map[r][c] -= 5;
}
}
break;
case'D':
case'd':
case 77:
if(map[r][c + 1] == 0 || map[r][c + 1] == 3)//人的前面是空地
{
map[r][c + 1] += 5; //在人前面的位置+5
map[r][c] -= 5; //人走了 人原来的位置-5
}
elseif(map[r][c + 1] == 4 || map[r][c + 1] == 7) //人的前面是箱子
{
if(map[r][c + 2] == 0 || map[r][c + 2] == 3) //箱子的前面
{
map[r][c + 2] += 4;
map[r][c + 1] += 1;
map[r][c] -= 5; //8
}
}
break;
}
}
int CountFBox(){
int c=0;
for (int i = 0;i < 10; i++){
for (int j = 0;j < 10; j++){
if(map[i][j]==7)
c++;
}
}
return c;
}
int main(){
while (CountFBox()<4)
{
system("cls"); //清除屏幕
DrawMap();
PlayGame();
}
system("cls");
DrawMap();
cout<<"恭喜过关!"<<endl;
return 0;
}