黑马程序员——C基础之推箱子游戏

------- iOS培训、android培训、java培训、期待与您交流! ----------

#include <stdio.h>

#define kRows 10

#define kCols 11


void printMap(char map[kRows][kCols]){

    for (int i = 0; i <kRows; i++) {

        printf("%s\n",map[i]);

    }

}


void move1(char map[kRows][kCols],int oldX,int oldY,int newX,int newY){

    char temp;

    temp = map[oldX][oldY];

    map[oldX][oldY] = map[newX][newY];

    map[newX][newY] = temp;

}

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

    char map[kRows][kCols] = {

        "##########",

        "#0 ####  #",

        "# X####  #",

        "#        #",

        "######   #",

        "#  ####  #",

        "#        #",

        "#   ######",

        "#         ",

        "##########"

    };

    int personX = 1;

    int personY = 1;

    int personNextX = personX;

    int personNextY = personY;

    int boxX = 2;

    int boxY = 2;

    char direction;

    char street = ' ';

    char box = 'X';

    printMap(map);

    printf("请控制小人移动: w. s. a. d. q.退出\n");

    while (1) {

        scanf("%c",&direction);

        getchar();//吸收字符

        //防穿墙

        personNextX = personX;

        personNextY = personY;

        switch (direction) {

            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("程序正在退出...\n");

                printf("程序已经退出!\n");

                break;

            default:

                break;

        }

        if (map[personNextX][personNextY] == street) {

            move1(map, personX, personY, personNextX, personNextY);

            personX = personNextX;

            personY = personNextY;

        }else if (map[personNextX][personNextY] == box){

            int boxNextX = boxX + (boxX - personX);

            int boxNextY = boxY + (boxY - personY);

            if (map[boxNextX][boxNextY] == street) {

                move1(map, boxX, boxY, boxNextX, boxNextY);

                move1(map, personX, personY, boxX, boxY);

                personX = personNextX;

                personY = personNextY;

                boxX = boxNextX;

                boxY = boxNextY;

            }

        }

        printMap(map);

        if (boxY == kCols - 2) {

            printf("哇哦,你推出来了!\n");

            break;

        }

    }

    return 0;

}


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值