#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <easyx.h>
#undef UNICODE
#undef _UNICODE
//0空地 1墙 2箱子 3目的地 4人 5箱子+目的地 7人+目的地
int map[8][6] = {
0,1,1,1,1,0,
1,1,0,0,1,0,
1,4,2,0,1,0,
1,1,2,0,1,1,
1,1,0,2,0,1,
1,3,2,0,0,1,
1,3,3,5,3,1,
1,1,1,1,1,1,};
int main()
{
initgraph(300, 400);
IMAGE wall, people, box, end, blank, redbox;
loadimage(&wall, "1", 50, 50);
loadimage(&people, "4", 50, 50);
loadimage(&box, "3", 50, 50);
loadimage(&end, "2", 50, 50);
loadimage(&blank, "0", 50, 50);
loadimage(&redbox, "5", 50, 50);
while (1)
{
system("cls");
for (int i = 0; i < 8; i++)
{
for (int j = 0; j < 6;j++)
{
switch (map[i][j])
{
case 0:putimage(j50,i50,&blank); break;
case 1:putimage(j * 50, i * 50, &wall); break;
case 2:putimage(j * 50, i * 50, &box); break;
case 3:putimage(j * 50, i * 50, &end); break;
case 4:putimage(j * 50, i * 50, &people); break;
case 5:putimage(j * 50, i * 50, &redbox); break;
case 7:putimage(j * 50, i * 50, &people); break;
}
}
printf("\n");
}
//定位人
int r, c;
int isfind = false;
for (int i = 0; i < 8; i++)
{
for (int j = 0; j < 6; j++)
{
if (map[i][j] == 4 || map[i][j] == 7)
{
r = i;
c = j;
isfind = true;
break;
}
}
if (isfind)
break;
}
char key = _getch();
switch (key)
{
case 'w':
//人前面是空地或目的地
if (map[r - 1][c] == 0||map[r-1][c]==3)
{
map[r - 1][c] += 4;
map[r][c] -= 4;
}
//人前是箱子
else if (map[r - 1][c] == 2 || map[r - 1][c] == 5)
{
//人的前面的前面
if (map[r - 2][c] == 0 || map[r - 2][c] == 3)
{
map[r - 2][c] += 2;
map[r - 1][c] += 2;
map[r][c] -= 4;
}
}
break;
case 's':
//人下面是空地或目的地
if (map[r + 1][c] == 0 || map[r + 1][c] == 3)
{
map[r + 1][c] += 4;
map[r][c] -= 4;
}
//人下是箱子
else if (map[r + 1][c] == 2 || map[r + 1][c] == 5)
{
//人的下面的下面
if (map[r + 2][c] == 0 || map[r + 2][c] == 3)
{
map[r + 2