黑马程序员技术交流社区

标题: 推箱子代码,还有能简化的地方吗? [打印本页]

作者: 张健康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