//小人在移动的时候,如何判断下一步是一个箱子
//小人推着箱子,箱子要移动的下一个位置
//要记录小人的位置、箱子的位置、箱子要移动的下一个位置
//计算箱子的下一个位置
//10*10地图,10*11存储
#include "stdio.h"
#define Row 10
#define Col 11//因为是推箱子的地图是义字符串输出的,每行字符串的末尾,有默认的'\0'结束符
void printMap(char map[Row][Col])
{
int i=0;
for (i=0;i<Row;i++)
{
printf("%s\n",map[i]);
}
}
//移动函数
void move1(char map[Row][Col],int oldX,int oldY,int newX,int newY)
{
char temp;
temp=map[oldX][oldY];
map[oldX][oldY]=map[newX][newY];
map[newX][newY]=temp;
}
int main()
{
//1、定义变量
char map[Row][Col]={
"##########",
"#0 #### #",
"# X#### #",
"# #",
"###### #",
"# #### #",
"# #",
"# ######",
"# ",
"##########",
};
//定义小人当前位置信息
int personX=1;
int personY=1;
//定义小人下一个位置
int personNextX=personX;
int personNextY=personY;
int boxX=2;
int boxY=2;
int boxNextX=boxX;
int boxNextY=boxY;
char direction;
char street=' ';
char box='X';
//2、打印地图
printMap(map);
//游戏说明
printf("请控制小人移动:w.上,s.下,l.左,r.右\n");
//3、编写循环控制程序
while(1)
{
//4、接收用户输入的方向
scanf("%c",&direction);
getchar();//获取一个字符从键盘上
//防止小人穿墙
personNextX=personX;
personNextY=personY;
//5、判断方向
switch(direction)
{
case 'w':
case 'W':
personNextX--;
break;
case 's':
case 'S':
personNextX++;
break;
case 'l':
case 'L':
personNextY--;
break;
case 'r':
case 'R':
personNextY++;
break;
case 'q':
case 'Q':
printf("程序正在退出...\n");
printf("程序已经退出!\n");
return 0;
default:
break;
}
//6、根据用户输入的方向,判断如何移动
//先判断小人的下一个位置是否是路
//如果是路,先让小人移动
if (map[personNextX][personNextY]==street)
{
//让小人和路进行交换
move1(map,personX,personY,personNextX,personNextY);
//重新调整小人的位置
personX=personNextX;
personY=personNextY;
}else if (map[personNextX][personNextY]==box)
{
// 如果不是路
//再判断是否是箱子
//如果是箱子,计算箱子的下一个位置
boxNextX=boxX+(boxX-personX);//计算箱子的下一个位置的X坐标的公式
boxNextY=boxY+(boxY-personY);//计算箱子的下一个位置的Y坐标的公式
//再次判断箱子的下一个位置是否是路,要移动小人和箱子
if (map[boxNextX][boxNextY]==street)
{
//移动箱子到箱子的下一个位置
move1(map,boxX,boxY,boxNextX,boxNextY);
//让小人移动到箱子的原来的位置
move1(map,personX,personY,boxX,boxY);
//重新调整箱子和小人的位置
personX=personNextX;
personY=personNextY;
boxX=boxNextX;
boxY=boxNextY;
}
}
//如果不是箱子,什么也不干
//7、重绘地图
printMap(map);
//8、判断箱子是否推出
if (boxY==Col-2)
{
printf("恭喜你推箱子成功!\n");
break;
}
}
// scanf("%s",map);
return 0;
} |
|