<20>【掌握】《走出迷宫》游戏代码实现+【理解】《走出迷宫》游戏优化

 

 

#include <stdio.h>

#define COL 6

#define ROW 6



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

    

    

    //****** 定义变量     **********

    

    //1、定义变量,地图、存储用户输入的方向、小人的位置

        char map[ROW][COL]={

                {'#','#','#','#','#','#'},

                {'#','O','#','#',' ',' '},

                {'#',' ','#','#',' ','#'},

                {'#',' ',' ','#',' ','#'},

                {'#','#',' ',' ',' ','#'},

                {'#','#','#','#','#','#'}

            };

    

        //保存用户输入的方向

    char direction;

    

    //定义变量保存小人的当前的位置

    int currentX=1;

    int currentY=1;

    

    //定义变量保存路

    char street = ' ';



    //2、先打印一遍地图

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

        for (int j=0; j<COL; j++) {

            printf("%c",map[i][j]);

        }

        printf("\n");

    }

    

    //3、提示用户游戏玩法

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

    

    char ch;

    //****** 要进行循环控制 *********

    while (1) {

    

    //4、接收用户输入的方向

        scanf("%c",&direction);

        scanf("%c",&ch);  //吸收多余的 \n

    //5、判断用户输入了什么方向

        switch (direction) {

            case 'w':

            case 'W':

                

                //****** 判断小人能否移动 ********

                

                //6、判断小人是否能够移动

                if (map[currentX-1][currentY]==street) {

                //         核心要知道小人的下一个位置是否是路

                //         是路

                //            让小人开始移动,移动的核心:小人和路交换

                    char temp;

                    // map[currentX][currentY]; 小人当前位置

                    // map[currentX-1][currentY];小人的下一个位置

                    temp = map[currentX][currentY];

                    map[currentX][currentY] = map[currentX-1][currentY];

                    map[currentX-1][currentY] = temp;

                    //重新记录小人的当前位置

                    currentX--;

                   

                }

                //         不是路 ,什么也不干

                break;

                

            case 's':

            case 'S':

                if (map[currentX+1][currentY]==street) {

                    //         核心要知道小人的下一个位置是否是路

                    //         是路

                    //            让小人开始移动,移动的核心:小人和路交换

                    char temp;

                    temp = map[currentX][currentY];

                    map[currentX][currentY] = map[currentX+1][currentY];

                    map[currentX+1][currentY] = temp;

                    //重新记录小人的当前位置

                    currentX++;

                    

                }

                break;

                

            case 'a':

            case 'A':

                if (map[currentX][currentY-1]==street) {

                    //         核心要知道小人的下一个位置是否是路

                    //         是路

                    //            让小人开始移动,移动的核心:小人和路交换

                    char temp;

                    temp = map[currentX][currentY];

                    map[currentX][currentY] = map[currentX][currentY-1];

                    map[currentX][currentY-1] = temp;

                    //重新记录小人的当前位置

                    currentY--;

                    

                }

                break;

                

            case 'd':

            case 'D':

                if (map[currentX][currentY+1]==street) {

                    //         核心要知道小人的下一个位置是否是路

                    //         是路

                    //            让小人开始移动,移动的核心:小人和路交换

                    char temp;

                    temp = map[currentX][currentY];

                    map[currentX][currentY] = map[currentX][currentY+1];

                    map[currentX][currentY+1] = temp;

                    //重新记录小人的当前位置

                    currentY++;

                    

                }

                break;

                

            case 'q':

            case 'Q':

                return 0;

                break;

                

            default:

                break;

        }

    

    //7、重绘地图

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

            for (int j=0; j<COL; j++) {

                printf("%c",map[i][j]);

            }

            printf("\n");

        }

    

    //****** 判断是否走出来   ********

    //判断 y 的值是否 == 5

        if (currentY==5) {

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

            break;

        }

    //      提示走出迷宫了

    //      break;游戏要结束

    }

    

    return 0;

}
######

#O##  

# ## #

#  # #

##   #

######

请控制小人移动: w.上  s.下  a.左   d.右   q.退出

w

######

#O##  

# ## #

#  # #

##   #

######

 

【理解】《走出迷宫》游戏优化

 

#include <stdio.h>

#define COL 12

#define ROW 6

/**

 *  打印地图

 *

 *  @param map 地图的数组

 */

void printMap(char map[ROW][COL]){



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

        for (int j=0; j<COL; j++) {

            printf("%c",map[i][j]);

        }

        printf("\n");

    }



}



/**

 *  实现了小人的移动

 *

 *  @param map  地图的数组

 *  @param oldX 小人的原来位置X坐标

 *  @param oldY 小人的原来位置Y坐标

 *  @param newX 小人的将要移动到位置X坐标

 *  @param newY 小人的将要移动到位置Y坐标

 */

void personMove(char map[ROW][COL],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[]) {

    

    

    //****** 定义变量     **********

    

    //1、定义变量,地图、存储用户输入的方向、小人的位置

        char map[ROW][COL]={

                {'#','#','#','#','#','#','#','#','#','#','#','#'},

                {'#','O','#','#',' ',' ',' ','#','#','#','#','#'},

                {'#',' ','#','#',' ','#',' ','#',' ',' ',' ','#'},

                {'#',' ',' ','#',' ','#',' ','#',' ','#',' ','#'},

                {'#','#',' ',' ',' ','#',' ',' ',' ','#',' ',' '},

                {'#','#','#','#','#','#','#','#','#','#','#','#'}

            };

    

    //保存用户输入的方向

    char direction;

    

    //定义变量保存小人的当前的位置

    int currentX=1;

    int currentY=1;

    

    //定义变量保存路

    char street = ' ';

    

    //2、先打印一遍地图

    printMap(map);

    

    //3、提示用户游戏玩法

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



    //****** 要进行循环控制 *********

    while (1) {

        

        //4、接收用户输入的方向

        scanf("%c",&direction);

        getchar();  //吸收多余的 \n

        //5、判断用户输入了什么方向

        switch (direction) {

            case 'w':

            case 'W':

                

                //****** 判断小人能否移动 ********

                

                //6、判断小人是否能够移动

                if (map[currentX-1][currentY]==street) {

                    //         核心要知道小人的下一个位置是否是路

                    //         是路

                    //            让小人开始移动,移动的核心:小人和路交换

                  

                    // map[currentX][currentY]; 小人当前位置

                    // map[currentX-1][currentY];小人的下一个位置

                    personMove(map,currentX,currentY,currentX-1,currentY);

                    //重新记录小人的当前位置

                    currentX--;

                    

                }

                //         不是路 ,什么也不干

                break;

                

            case 's':

            case 'S':

                if (map[currentX+1][currentY]==street) {

                    //         核心要知道小人的下一个位置是否是路

                    //         是路

                    //            让小人开始移动,移动的核心:小人和路交换

                    personMove(map,currentX,currentY,currentX+1,currentY);

                    //重新记录小人的当前位置

                    currentX++;

                    

                }

                break;

                

            case 'a':

            case 'A':

                if (map[currentX][currentY-1]==street) {

                    //         核心要知道小人的下一个位置是否是路

                    //         是路

                    //            让小人开始移动,移动的核心:小人和路交换

                    

                    personMove(map,currentX,currentY,currentX,currentY-1);

                    //重新记录小人的当前位置

                    currentY--;

                    

                }

                break;

                

            case 'd':

            case 'D':

                if (map[currentX][currentY+1]==street) {

                    //         核心要知道小人的下一个位置是否是路

                    //         是路

                    //            让小人开始移动,移动的核心:小人和路交换

                    personMove(map,currentX,currentY,currentX,currentY+1);

                    //重新记录小人的当前位置

                    currentY++;

                    

                }

                break;

                

            case 'q':

            case 'Q':

                return 0;

                break;

                

            default:

                break;

        }

        

        //7、重绘地图

        printMap(map);

        

        //****** 判断是否走出来   ********

        //判断 y 的值是否 == 5

        if (currentY==COL-1) {

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

            break;

        }

        //      提示走出迷宫了

        //      break;游戏要结束

    }

    

    return 0;

}

 

你可能感兴趣的:(游戏)