A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

#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;
}

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马