黑马程序员技术交流社区
标题:
李伟的推箱子(加注释)
[打印本页]
作者:
Django小虾米
时间:
2015-12-30 23:35
标题:
李伟的推箱子(加注释)
#include<stdio.h>
#include<string.h>
/**
* 打印地图
*
* @param row 2维数组的行数
* @param col 2为数组的列数
* @param map 2维数组名
*/
void printMap(int row,int col,char map[][col]);
/**
* 交换两个字符
*
* @param a 字符1
* @param b 字符2
*/
void change(char *a,char *b);
int main()
{
char map[10][11]={
"##########",
"#O #### #",
"# X#### #",
"# #",
"###### #",
"# #### #",
"# #",
"# ######",
"# ",
"##########"};
char direction;
int personX = 1;
int personY = 1;//小人的位置
int boxX = 2;
int boxY = 2;//箱子的位置
int personNextX = personX;
int personNextY = personY;//小人下一步的位置
int boxNextX = boxX;
int boxNextY = boxY;//箱子下一步的位置
printMap(10,11,map);//打印地图
while (1)
{
printf("请控制小人移动:A.左 D.右 W.上 S.下 Q.退出\t");
scanf("%c",&direction);
personNextX = personX;
personNextY = personY;//不要这两句,小人可以穿墙,不信你试试,嘿嘿
switch (direction) {
case 'a':
personNextY--;
break;
case 'd':
personNextY++;
break;
case 'w':
personNextX--;
break;
case 's':
personNextX++;
break;
case 'q':
printf("程序已退出\n");
return 0;
}
if (map[personNextX][personNextY] == ' ')//如果小人的下一个位置是路
{
change(&map[personNextX][personNextY],&map[personX][personY]);
//交换小人当前位置和下一个位置的两个字符
personX = personNextX;
personY = personNextY;
//刷新小人的位置
}
else if(map[personNextX][personNextY] == 'X')//如果小人的下一个位置是箱子
{
boxNextX = boxX+(boxX-personX);
boxNextY = boxY+(boxY-personY);//计算箱子的下一步位置
if (map[boxNextX][boxNextY] == ' ')//如果箱子的下一个位置是路
{
change(&map[boxNextX][boxNextY],&map[boxX][boxY]);
//交换箱子当前位置下下一步位置的字符
change(&map[personX][personY],&map[boxX][boxY]);
//交换小人当前位置和箱子当前位置的字符
personX = personNextX;
personY = personNextY;//刷新小人的位置
boxX = boxNextX;
boxY = boxNextY;//刷新箱子的位置
}
}
if (boxY ==9)//判断箱子到了出口
{
printf("哎哟不错哦,你把箱子推出来了哟~\n");
return 0;
}
printMap(10,11,map);//打印地图
}
return 0;
}
void printMap(int row,int col,char map[][col])
{
for (int i=0; i<row; i++)
{
printf("%s",map[i]);
printf("\n");
}
}
void change(char *a,char *b)
{
char temp = *a;
*a = *b;
*b = temp;
}
复制代码
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2