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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© yuyang 中级黑马   /  2015-1-5 23:35  /  1086 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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

0 个回复

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