Oraice 2015-05-30 11:49 采纳率: 0%
浏览 1822

C语言的推箱子在推箱子移动的时候存在一个错误,求大牛解答,并且修改程序绝对不麻烦,谢谢了。

#include
#include
#include

//定义墙壁的高和宽
#define H 11
#define W 26

int scr[H][W] = {{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},
{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1},
{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,1,1,1,1},
{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0},
{1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0},
{1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0},};//2为人,3为箱子,4为位置

typedef struct {
int x;
int y;
char flag;
}person_t;

typedef struct {
int x;
int y;
char flag;
}box_t;

person_t per;
box_t box;

void print(int a[H][W]);
void menu();
void MoveUpOfBox(int a[][W]);
void MoveDownOfBox(int a[][W]);
void MoveLeftOfBox(int a[][W]);
void MoveRightOfBox(int a[][W]);

int main(int argc, char *argv[]){
menu();

per.x = 5;
per.y = 5;
box.x = 4;
box.y = 6;

scr[per.x][per.y] = 2;
scr[box.x][box.y] = 3;  

while(1){
    if(kbhit()){
        switch(getch()){
        case 'a':
        case 'A':
            if(per.y >= 1){
                scr[per.x][per.y] = 0;
                if(box.x == per.x && per.y == box.y + 1){
                    MoveLeftOfBox(scr);
                }
                scr[per.x][--per.y] = 2;
            }
            break;
        case 'd':
        case 'D':
            if(per.y <= W - 1){
                scr[per.x][per.y] = 0;
                if(per.x == box.x && per.y == box.y - 1){
                    MoveRightOfBox(scr);
                }
                scr[per.x][++per.y] = 2;
            }   
            break;
        case 'w':
        case 'W':
            if(per.x >= 1){
                scr[per.x][per.y] = 0;
                if(per.y == box.y && per.x == box.x + 1){
                    MoveUpOfBox(scr);
                }
                scr[--per.x][per.y] = 2;
            }
            break;
        case 'S':
        case 's':
            if(per.x <= H - 1){
                scr[per.x][per.y] = 0;
                if(per.y == box.y && per.x == box.x - 1){
                    MoveDownOfBox(scr);
                }
                scr[++per.x][per.y] = 2;
            }
            break;
        default:
            printf("enter error. please again.\n");             
        }
    }

    print(scr);
}

return 0;

}

void print(int a[H][W]){
int i, j;

system("cls");
for(i = 0; i <= H - 1; i++){
    for(j = 0; j <= W - 1; j++){            
            a[i][W - 1] = 4;
        if(a[i][j] == 0){
            printf(" ");
        }
        if(a[i][j] == 1){
            printf("█");
        }
        if(a[i][j] == 2){
            printf("⊙");
        }
        if(a[i][j] == 3){
            printf("▓");
        }
        if(a[i][j] == 4){
            printf("|\n");
        }
    }
}

}

void menu(){
printf("欢迎,请点击任意键继续.\n");
getch();
}

void MoveLeftOfBox(int a[][W]){
a[box.x][box.y] = 0;
a[box.x][--box.y] = 3;
}

void MoveRightOfBox(int a[][W]){
a[box.x][box.y] = 0;
a[box.x][++box.y] = 3;
}

void MoveUpOfBox(int a[][W]){
a[box.x][box.y] = 0;
a[--box.x][box.y] = 3;
}

void MoveDownOfBox(int a[][W]){
a[box.x][box.y] = 0;
a[++box.x][box.y] = 3;
}

  • 写回答

2条回答

  • 另一花生 2015-05-30 13:54
    关注

    程序报啥错误啊,亲!!!!

    评论

报告相同问题?

悬赏问题

  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 对于相关问题的求解与代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 信号傅里叶变换在matlab上遇到的小问题请求帮助
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料