#include <stdio.h>
#include <stdlib.h>
#define kRows 10
#define kCols 11
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
/*
//1、定义变量,保存地图、位置信息
//2、打印地图
//3、提示玩法
//4、编写控制程序
*/
/*
打印地图
*/
void printMap(char map[kRows][kCols])
{
int i;
for(i=0;i<kRows;i++)
{
printf("%s\n",map[i]);
}
}
/*
移动的函数
*/
void move1(char map[kRows][kCols],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(int argc, char *argv[]) {
//********* 定义变量 *********
//1、定义地图
char map[kRows][kCols]={
"##########",
"#0 #### #",
"# X#### #",
"# #",
"###### #",
"# #### #",
"# #",
"# ######",
"# ",
"##########"
};
//定义变量保存位置信息
//定义小人、箱子当前位置信息
int personX =1;
int personY =1;
int boxX=2;
int boxY=2;
//小人、箱子将要移动的下一个位置信息
int personNextX=1;
int personNextY=1;
int boxNextX=2;
int boxNextY=2;
//定义变量接受用户输入的方向
char direction=0;
//定义路的字符
char street=' ';
char box='X';
//********* 打印地图 *********
//2、打印一遍地图
printMap(map);
printf("请控制小人移动:w.上 s.下 a.左 d.右 \n");
//********* 编写循环控制程序 *********
int i=0;
while(1)
{
//3、接收用户输入的方向
scanf("%c",&direction);
getchar();
//4、判断方向
switch(direction)
{
case 'w':
case 'W':
personNextX--;
break;
case 's':
case 'S':
personNextX++;
break;
case 'a':
case 'A':
personNextY--;
break;
case 'd':
case 'D':
personNextY++;
break;
case 'q':
case 'Q':
printf("程序已退出\n");
return 0;
}
//5、根据用户输入的方9向 判断如何移动
// 先判断小人的下个位置是否是路
// 如果是路,先让小人移动
//********* 判断模块 *********
if(map[personNextX][personNextY]==street)
{
//移动
//让小人和路进行交换
move1(map,personX,personY,personNextX,personNextY);
personX=personNextX;
personY=personNextY;
}
// 如果不是路
// 再次判断是否是箱子
// 如果是箱子,计算箱子的下一个位置
else if(map[personNextX][personNextY]=='X'){
boxNextX=boxX+(boxX-personX);
boxNextY=boxY+(boxY-personY);
// 再次判断箱子的下一个位置是否是路
if(map[boxNextX][boxNextY]==street)
{
// 如何移动小人和箱子呢?
// 1)移动箱子到箱子的下一个位置
move1(map,boxX,boxY,boxNextX,boxNextY);
// 2)让小人移动到箱子的原来的位置
move1(map,personX,personY,boxX,boxY);
// 重新调整小人、箱子的位置
personX=personNextX;
personY=personNextY;
boxX=boxNextX;
boxY=boxNextY;
}
}
//如果不是箱子,什么也不干
//防穿墙
else
{
personNextX=personX;
personNextY=personY;
}
//********* 重绘地图 *********
//6、重绘地图
printMap(map);
//********* 判断是否走出来 *********
//7、箱子的位置等于9
if(boxY==kCols-2)
{
printf("你出来了\n");
break;
}
i++;
printf("i=%d\n",i);
}
return 0;
}
|
|