#include <stdio.h> //标准输入输出头文件#include <stdlib.h> //system函数的头文件#include <conio.h> //getch函数的头文件int i,j;void draw_map(int map[10][12]); //声明画图函数int main(){char input;int count=0; //定义记分变量/*下面定义一个二维数组,其中的元素是不同图像的ID号,在后面的函数中将讲解不同数字分别代表的图像元素*/int map[10][12] = {{2,2,2,2,2,1,1,1,1,1,2,2},{1,1,1,1,2,1,0,0,0,1,1,2},{1,0,0,1,1,1,0,1,0,0,1,2},{1,0,4,3,3,3,3,3,1,0,1,1},{1,0,0,1,1,3,3,3,4,0,0,1},{1,0,0,0,0,4,1,1,4,1,0,1},{1,0,4,1,4,0,0,0,4,0,0,1},{1,1,0,6,0,1,1,1,4,1,0,1},{2,1,1,1,1,1,2,1,0,0,0,1},{2,2,2,2,2,2,2,1,1,1,1,1}};while (1) //死循环,等待用户命令{system("CLS");draw_map(map);printf("当前得分:%d\n",count);//找初始位置for (i=0;i<10;i++){for (j=0;j<12;j++){if (map[i][j]==6||map[i][j]==9)break;}if (map[i][j]==6||map[i][j]==9)break;}printf("您的当前坐标(%d,%d)",i,j);input = getch(); //用getch()函数无需回车确认地获取用户输入,用于控制行走方向。
switch (input){case 'w'://如果人前面是空地。
if(map[i-1][j]==0){map[i-1][j]=6+0; //人往前走一步,ID为人的ID(6)加上空地的ID(0)。
if(map[i][j]==9) //如果当前人站的位置为目的地,则ID为9(即人的ID(6)加上目的地ID(3))。
map[i][j]=3; //将人往前走一步后原地的ID修改为空地ID(3)。
elsemap[i][j]=0; //否则原地ID修改为空地ID 。
}//如果人前面是目的地。
else if((map[i-1][j]==3)||(map[i-1][j]==9)){map[i-1][j]=6+3; //人往前走一步,ID为人ID+目的地ID=9。
if(map[i][j]==9) //如果原地也是目的地(ID为9)。
map[i][j]=3; //人走后把原地ID修改回目的地ID。
elsemap[i][j]=0; //否则原地ID修改为为空地ID}//如果人前面是箱子。
else if(map[i-1][j]==4){//如果人前面是箱子,而箱子前面是空地。
if (map[i-2][j]==0){map[i-2][j]=4; //人推箱子往前走一步,把空地ID修改为箱子ID(4)//下面是对箱子原地进行判断if(map[i-1][j]==7) //如果箱子原地为目的地。
map[i-1][j]=9; //人站在箱子的原地(目的地)时该地ID应该为人的ID+目的地ID=9。
elsemap[i-1][j]=6; //否则,人站在了原来的空地上,ID应该为6+0=6。
//下面是对人原地进行判断if(map[i][j]==9) //如果之前是目的地。
map[i][j]=3; //人走了之后修改回目的地ID。
elsemap[i][j]=0; //否则就是空地。
}//如果人的前面是箱子,而箱子前面是目的地。
else if (map[i-2][j]==3){map[i-2][j]=7; //ID为7(目的地ID(3)+箱子ID(4)=7),表示已经把箱子推入了目的地。
count++;//下面是对箱子原先位置的判断,同上。
if(map[i-1][j]==7)map[i-1][j]=9;elsemap[i-1][j]=6;//下面是对人原先位置进行判断,同上。
if(map[i][j]==9)map[i][j]=3;elsemap[i][j]=0;}}//如果人前面是已经进入某目的地的箱子(ID=7)。
else if(map[i-1][j]==7){//如果人前面是已经进入某目的地的箱子,而箱子前面是空地。
if(map[i-2][j]==0){count--;map[i-2][j]=4; //把箱子重新推到空地上,ID=箱子ID+空地ID=4。
map[i-1][j]=9; //人自然而然的就站在了原先的目的地上了。
//下面是对人原先地进行判断,方法同上。
if(map[i][j]==9)map[i][j]=3;elsemap[i][j]=0;}//如果人前面是已经进入某目的地的箱子,而箱子前面是另一目的地。
if(map[i-2][j]==3){map[i-2][j]=7; //把箱子推入了另一目的地,自然,ID也应是7。
map[i-1][j]=9; //人站在了目的地上。
//下面是对人原先站立地进行判断,方法同上。
if(map[i][j]==9)map[i][j]=3;elsemap[i][j]=0;}}break;case 's'://如果人前面是空地。
if(map[i+1][j]==0){map[i+1][j]=6+0; //人往前走一步,ID为人的ID(6)加上空地的ID(0)。
if(map[i][j]==9) //如果当前人站的位置为目的地,则ID为9(即人的ID(6)加上目的地ID(3))。
map[i][j]=3; //将人往前走一步后原地的ID修改为空地ID(3)。
elsemap[i][j]=0; //否则原地ID修改为空地ID 。
}//如果人前面是目的地。
else if(map[i+1][j]==3){map[i+1][j]=6+3; //人往前走一步,ID为人ID+目的地ID=9。
if(map[i][j]==9) //如果原地也是目的地(ID为9)。
map[i][j]=3; //人走后把原地ID修改回目的地ID。
elsemap[i][j]=0; //否则原地ID修改为为空地ID}//如果人前面是箱子。
else if(map[i+1][j]==4){//如果人前面是箱子,而箱子前面是空地。
if (map[i+2][j]==0){map[i+2][j]=4; //人推箱子往前走一步,把空地ID修改为箱子ID(4)//下面是对箱子原地进行判断if(map[i+1][j]==7) //如果箱子原地为目的地。
map[i+1][j]=9; //人站在箱子的原地(目的地)时该地ID应该为人的ID+目的地ID=9。
elsemap[i+1][j]=6; //否则,人站在了原来的空地上,ID应该为6+0=6。
//下面是对人原地进行判断if(map[i][j]==9) //如果之前是目的地。
map[i][j]=3; //人走了之后修改回目的地ID。
elsemap[i][j]=0; //否则就是空地。
}//如果人的前面是箱子,而箱子前面是目的地。
else if (map[i+2][j]==3){map[i-2][j]=7; //ID为7(目的地ID(3)+箱子ID(4)=7),表示已经把箱子推入了目的地。
count++;//下面是对箱子原先位置的判断,同上。
if(map[i+1][j]==7)map[i+1][j]=9;elsemap[i+1][j]=6;//下面是对人原先位置进行判断,同上。
if(map[i][j]==9)map[i][j]=3;elsemap[i][j]=0;}}//如果人前面是已经进入某目的地的箱子(ID=7)。
else if(map[i+1][j]==7){//如果人前面是已经进入某目的地的箱子,而箱子前面是空地。
if(map[i+2][j]==0){count--;map[i+2][j]=4; //把箱子重新推到空地上,ID=箱子ID+空地ID=4。
map[i+1][j]=9; //人自然而然的就站在了原先的目的地上了。
//下面是对人原先地进行判断,方法同上。
if(map[i][j]==9)map[i][j]=3;elsemap[i][j]=0;}//如果人前面是已经进入某目的地的箱子,而箱子前面是另一目的地。
if(map[i+2][j]==3){map[i+2][j]=7; //把箱子推入了另一目的地,自然,ID也应是7。
map[i+1][j]=9; //人站在了目的地上。
//下面是对人原先站立地进行判断,方法同上。
if(map[i][j]==9)map[i][j]=3;elsemap[i][j]=0;}}break;case 'a'://如果人前面是空地。
if(map[i][j-1]==0){map[i][j-1]=6+0; //人往前走一步,ID为人的ID(6)加上空地的ID(0)。
if(map[i][j]==9) //如果当前人站的位置为目的地,则ID为9(即人的ID(6)加上目的地ID(3))。
map[i][j]=3; //将人往前走一步后原地的ID修改为空地ID(3)。
map[i][j]=0; //否则原地ID修改为空地ID 。
}//如果人前面是目的地。
else if(map[i][j-1]==3){map[i][j-1]=6+3; //人往前走一步,ID为人ID+目的地ID=9。
if(map[i][j]==9) //如果原地也是目的地(ID为9)。
map[i][j]=3; //人走后把原地ID修改回目的地ID。
elsemap[i][j]=0; //否则原地ID修改为为空地ID}//如果人前面是箱子。
else if(map[i][j-1]==4){//如果人前面是箱子,而箱子前面是空地。
if (map[i][j-2]==0){map[i][j-2]=4; //人推箱子往前走一步,把空地ID修改为箱子ID(4)//下面是对箱子原地进行判断if(map[i][j-1]==7) //如果箱子原地为目的地。
map[i][j-1]=9; //人站在箱子的原地(目的地)时该地ID应该为人的ID+目的地ID=9。
elsemap[i][j-1]=6; //否则,人站在了原来的空地上,ID应该为6+0=6。