#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;//i1,j1人物坐标 i2,j2箱子坐标
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;
}
推箱子小游戏
最新推荐文章于 2024-09-03 20:20:49 发布