#include<stdio.h>
#include<math.h>
#include<string.h>
#include<stdlib.h>
#include<time.h>
int main ()
{
begin:
int i,j;
char p[16][16];
for(i=0; i<16; i++)
{
for(j=0; j<16; j++)
p[i][j]=' ';
}
for(i=0; i<16; i++)
{
p[i][15]='#';
p[i][0]='#';
}
for(j=0; j<16; j++)
{
p[0][j]='#';
p[15][j]='#';
}
p[5][3]='#';
p[6][8]='#';
p[2][3]='#';
p[8][12]='#';
p[2][12]='#';
p[11][3]='#';
p[10][9]='#';
p[6][6]='#';
p[12][12]='#';
p[12][11]='#';
p[13][8]='#';
p[8][6]='#';
p[8][5]='#';
p[9][5]='#';
p[5][8]='#';
p[2][0]='#';
p[2][7]='#';
p[2][8]='#';
p[3][8]='#';
p[3][9]='#';
p[4][3]='#';
p[5][14]='#';
p[5][13]='#';
p[13][1]='#';
p[13][2]='#';
p[13][3]='#';
p[1][1]='#';
p[1][2]='#';
p[2][1]='#';
p[7][8]='#';
p[6][6]='#';
p[7][6]='#';
p[8][6]='#';
p[14][1]='#';
p[14][2]='#';
p[14][3]='#';
p[14][4]='#';
p[14][5]='#';
p[10][7]='#';
p[10][8]='#';
p[11][8]='#';
p[4][9]='#';
p[7][1]='#';
p[8][1]='#';
p[9][2]='#';
p[14][14]='#';
p[14][13]='#';
p[6][14]='#';
srand(time(NULL));
p[4][5]='!';
p[5][4]='@';
int i3,j3;
for(i=0; i<100; i++)
{
i3=(rand()%16),j3=(rand()%16);
if(p[i3][j3]!='#'&&p[i3][j3]!='!'&&p[i3][j3]!='@')
break;
}
p[i3][j3]='O';
for(i=0; i<16; i++)
{
for(j=0; j<16; j++)
printf("%c",p[i][j]);
printf("\n");
}
printf("\n");
printf("'@'为箱子 ‘!’为人物 ‘#’为墙壁 ‘O’为终点\n输入大写WSAD 并按 回车确定 分别为向上下左右移动\n(单次输入单个大写字母)\n");
int i1=4,j1=5,i2=5,j2=4;
char x;
int bushu=0;
while (~scanf("%c",&x))
{
char q[100];
gets(q);
if(x=='S')
{
if (i1==i2-1&&j1==j2)
{
if(p[i2+1][j2]!='#')
{
p[i2+1][j2]='@';
p[i2][j2]='!';
p[i2-1][j2]=' ';
i2++;
i1++;
bushu++;
}
else
{
printf("");
}
}
else if(p[i1+1][j1]!='#')
{
p[i1+1][j1]='!';
p[i1][j1]=' ';
i1++;
bushu++;
}
}
else if(x=='W')
{
if (i1==i2+1&&j1==j2)
{
if(p[i2-1][j2]!='#')
{
p[i2-1][j2]='@';
p[i2][j2]='!';
p[i2+1][j2]=' ';
i2--;
i1--;
bushu++;
}
else
{
printf("");
}
}
else if(p[i1-1][j1]!='#')
{
p[i1-1][j1]='!';
p[i1][j1]=' ';
i1--;
bushu++;
}
}
else if(x=='A')
{
if (i1==i2&&j1==j2+1)
{
if(p[i2][j2-1]!='#')
{
p[i2][j2-1]='@';
p[i2][j2]='!';
p[i2][j2+1]=' ';
j2--;
j1--;
bushu++;
}
else
{
printf("");
}
}
else if(p[i1][j1-1]!='#')
{
p[i1][j1-1]='!';
p[i1][j1]=' ';
j1--;
bushu++;
}
}
else if(x=='D')
{
if (i1==i2&&j1==j2-1)
{
if(p[i2][j2+1]!='#')
{
p[i2][j2+1]='@';
p[i2][j2]='!';
p[i2][j2-1]=' ';
j2++;
j1++;
bushu++;
}
else
{
printf("");
}
}
else if(p[i1][j1+1]!='#')
{
p[i1][j1+1]='!';
p[i1][j1]=' ';
j1++;
bushu++;
}
}
system("cls");
for(i=0; i<16; i++)
{
for(j=0; j<16; j++)
printf("%c",p[i][j]);
printf("\n");
}
printf("\n");
if (i2==i3&&j2==j3)
{
printf("====================================================Mission Succeed=====================================================\n");
printf("按下‘R’回车继续游戏\n");
}
else if((p[i2+1][j2]=='#'&&p[i2][j2+1]=='#')||(p[i2+1][j2]=='#'&&p[i2][j2-1]=='#')||(p[i2+1][j2]=='#'
&&p[i2][j2-1]=='#')||(p[i2-1][j2]=='#'&&p[i2][j2-1]=='#')||(i1==i3&&j1==j3))
{
printf("====================================================Mission Failure=====================================================\n");
printf("按下‘R’回车重新游戏\n");
}
else
printf("当前所用步数:%d\n",bushu);
if(x=='R')
{
system("cls");
goto begin;
}
}
char q[100];
for(i=0; i<100; i++)
scanf("%c",&q[i]);
return 0;
}