黑马程序员技术交流社区
标题:
推箱子代码,还有能简化的地方吗?
[打印本页]
作者:
张健康ios0826
时间:
2015-9-8 22:35
标题:
推箱子代码,还有能简化的地方吗?
#include <stdio.h>
#define ROW 10
#define COL 11
void personMove(char map[ROW][COL],int oldX,int oldY,int newX,int newY){
int temp = map[oldX][oldY];
map[oldX][oldY] = map[newX][newY];
map[newX][newY] = temp;
}
int main(int argc, const char * argv[]) {
char map[ROW][COL]={
"##########",
"#O #### #",
"# X#### #",
"# #",
"###### #",
"# #### #",
"# #",
"# ######",
"# ",
"##########"};
//打印地图
for (int i = 0; i < ROW; i++) {
printf("%s\n",map[i]);
}
//定义变量,人当前位置,箱子当前位置,人移动后位置,箱子移动位置. 接受人输入方向
int personX=1,personY=1,boxX=2,boxY=2;
int personNewX=personX,personNewY=personY;
char direction,ch;
//循环控制
while (1) {
printf("请输入方向:\n");
//保存用户输入方向
scanf("%c",&direction);
scanf("%c",&ch);
personNewX=personX ;
personNewY=personY ;
switch (direction) {
//判断,人和箱子是否移动
case 'w':
personNewX--;
//人是否移动
//人前面是不是箱子箱子是否移动
break;
case 's':
personNewX++;
//人前面是不是箱子箱子是否移动
break;
case 'a':
personNewY--;
break;
case 'd':
personNewY++;
//人前面是不是箱子箱子是否移动
break;
}
if (map[personNewX][personNewY] == ' ') {
personMove(map, personX, personY, personNewX, personNewY);
personX = personNewX;
personY = personNewY;
}else if(map[personNewX][personNewY] == map[boxX][boxY]){
int boxNewX=boxX+(boxX-personX),boxNewY=boxY+(boxY-personY);
if (map[boxNewX][boxNewY] == ' ') {
personMove(map, boxX, boxY, boxNewX, boxNewY);
personMove(map, personX, personY, boxX, boxY);
personX = personNewX;
personY = personNewY;
boxX = boxNewX;
boxY = boxNewY;
}
}
for (int i = 0; i < ROW; i++) {
printf("%s\n",map[i]);
}
if (boxY == 9) {
printf("你赢了!\n");
break;
}
//箱子前面是不是墙
//箱子是否推出来了
}
return 0;
作者:
郭占岭
时间:
2015-9-8 22:39
hao lihai deyangzi
作者:
bustle
时间:
2015-9-8 22:45
用心了,赞
作者:
翟宇浩
时间:
2015-9-9 22:16
差不多就是这样了,没法再怎么简化了
作者:
dw4861
时间:
2015-9-9 22:20
如果无所顾忌还是可以的,比如
不用顾及可读性、规范等,至少可以把长长的标识符换成单字符的,哈哈
作者:
1wang2huan
时间:
2015-9-9 22:26
感觉这行代码判断有问题else if(map[personNewX][personNewY] == map[boxX][boxY]) 我觉得应该是==‘X’ 不知道我说的对不对?
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2