#include <stdio.h>
#include <stdlib.h>
#include <getch.h>
int main(int argc,const char* argv[])
{
char maze[8][8]=
{
{2,2,2,2,2,2,2,2},
{2,2,2,4,4,2,2,2},
{2,2,2,0,4,2,2,2},
{2,2,0,0,3,4,2,2},
{2,2,0,3,0,0,2,2},
{2,0,0,2,3,3,0,2},
{2,0,0,1,0,0,0,2},
{2,2,2,2,2,2,2,2}
};
char man_x=6,man_y=3;
int step=0;
for(;;)
{
system("clear");
for(int i=0;i<8;i++)
{
for(int j=0;j<8;j++)
{
if(maze[i][j]==2)// 墙
printf("# ");
else if (maze[i][j]==0)//路
printf(" ");
else if(maze[i][j]==3||maze[i][j]==7)//箱子
printf("$ ");
else if(maze[i][j]==4)//目标点
printf("o ");
else if(maze[i][j]==1||maze[i][j]==5)//人
printf("@ ");
}
printf("\n");
}
if(maze[1][3]==7&&maze[1][4]==7&&maze[2][4]==7&&maze[3][5]==7)
printf("步数%d",step);
return 0;
}
switch(getch())
{
case 183://向上
if(0==maze[man_x-1][man_y]||4==maze[man_x-1][man_y])//上面是路或目>标点
{
maze[man_x][man_y]-=1;
maze[--man_x][man_y]+=1;
step++;
}
else if(3==maze[man_x-1][man_y]&&0==maze[man_x-2][man_y])//上面是箱
子,箱子上是路
{
maze[man_x][man_y]-=1;
maze[--man_x][man_y]-=2;
maze[man_x-1][man_y]+=3;
step++;
}
else if((3==maze[man_x-1][man_y]||7==maze[man_x-1][man_y])&&4==maze[man_x-2][man_y])//上面是箱子,箱子上是目标
{
maze[man_x][man_y]-=1;
maze[--man_x][man_y]-=2;
maze[man_x-1][man_y]+=3;
step++;
}
break;
case 184://向下
if(0==maze[man_x+1][man_y]||4==maze[man_x+1][man_y])//下面是或目标>点
{
maze[man_x][man_y]-=1;
maze[++man_x][man_y]+=1;
step++;
}
else if(3==maze[man_x+1][man_y]&&0==maze[man_x+2][man_y])//下面是箱
子,箱子下是路
{
maze[man_x][man_y]-=1;
maze[++man_x][man_y]-=2;
maze[man_x+1][man_y]+=3;
step++;
}
break;
case 186://向左
if(0==maze[man_x][man_y-1]||4==maze[man_x][man_y-1])//左是或目标点
{
maze[man_x][man_y]-=1;
maze[man_x][--man_y]+=1;
step++;
}
else if(3==maze[man_x][man_y-1]&&0==maze[man_x][man_y-2])//左是箱子
,箱子左是路
{
maze[man_x][man_y]-=1;
maze[man_x][--man_y]-=2;
maze[man_x][man_y-1]+=3;
step++;
}
else if(3==maze[man_x][man_y-1]&&4==maze[man_x][man_y-2])//左是箱子
,箱子左是目标
{
maze[man_x][man_y]-=1;
maze[man_x][--man_y]-=2;
maze[man_x][man_y-1]+=3;
step++;
}
break;
case 185://向右
if(0==maze[man_x][man_y+1]||4==maze[man_x][man_y+1])//右是或目标点
{
maze[man_x][man_y]-=1;
maze[man_x][++man_y]+=1;
step++;
}
else if(3==maze[man_x][man_y+1]&&0==maze[man_x][man_y+2])//右是箱子
,箱子右是路
{
maze[man_x][man_y]-=1;
maze[man_x][++man_y]-=2;
maze[man_x][man_y+1]+=3;
step++;
}
else if(3==maze[man_x][man_y+1]&&4==maze[man_x][man_y+2])//右是箱子
,箱子右是目标
{
maze[man_x][man_y]-=1;
maze[man_x][++man_y]-=2;
maze[man_x][man_y+1]+=3;
step++;
}
break;
}
}
}