// 
//  main.c 
//  17-迷宫游戏优化 
// 
//  Created by mac on 15-1-5. 
//  Copyright (c) 2015年 itcast. All rights reserved. 
// 
 
#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; 
    return 0; 
} 
 |   
        
 
    
    
    
     
 
 |