黑马程序员技术交流社区
标题: 看视频做的推箱子,出现问题:箱子不走人卡到箱子的位..... [打印本页]
作者: 403295277 时间: 2015-8-26 20:06
标题: 看视频做的推箱子,出现问题:箱子不走人卡到箱子的位.....
#include <stdio.h>
#define kRow 10
#define kLoc 11
//打印地图函数
void printMap(char arr[kRow][kLoc]){
for (int i=0; i<kRow; i++) {
printf("%s\n",arr);
}
}
// 移动小人 箱子的函数
void mov(char arr[kRow][kLoc],int oldX,int oldY,int newX,int newY){
char temp;
temp=arr[oldX][oldY];
arr[oldX][oldY]=arr[newX][newY];
arr[newX][newY]=temp;
}
int main(int argc, const char * argv[]) {
char map[kRow][kLoc]={
"##########",
"#O #### #",
"# X #",
"# #",
"###### #",
"# ### #",
"# #",
"# #######",
"# ",
"##########"
};
char box='X';
printMap(map);
//定义箱子 人的位子
int BoxX,BoxY,BoxNextX,BoxNextY;
int PersonX,PersonY,PersonNextX,PersonNextY;
//初始化箱子位子
BoxX=2;
BoxY=2;
//初始化人的位子,初始化人的下一个位子
PersonX=PersonY=PersonNextX=PersonNextY=1;
//定义存放方向的字符
char derection;
char street=' ';
printf("请输入:w.上 s.下 a.左 d.右 q.退出\n");
while (1) {
scanf("%c",&derection);
getchar();
//防止穿墙
PersonNextX=PersonX;
PersonNextY=PersonY;
switch (derection) {
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("游戏结束!");
return 0;
default:
break;
}
if (map[PersonNextX][PersonNextY]==street) {
mov(map, PersonX, PersonY, PersonNextX, PersonNextY);
PersonX=PersonNextX;
PersonY=PersonNextY;
}else if (map[PersonNextX][PersonNextY]==box){
//定义箱子下一个位子的算法
BoxNextX=BoxX+(BoxX-PersonX);
BoxNextY=BoxY+(BoxY-PersonY);
if (map[BoxNextX][BoxNextY]==street) {
mov(map, BoxX, BoxY, BoxNextX, BoxNextY);
mov(map, PersonX, PersonY, BoxX, BoxY);
//重新调整箱子 小人的位子
PersonX=PersonNextX;
PersonY=PersonNextY;
BoxX=BoxNextX;
BoxX=BoxNextY;
}
}
printMap(map);
}
return 0;
}
| 欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |