码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2015-07-08 18:22:15      阅读:227      评论:0      收藏:0      [点我收藏+]

标签:

 

 

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

 

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

标签:

原文地址:http://www.cnblogs.com/kongweiiwei/p/4630747.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!