- //
- // main.c
- // 17-《迷宫》游戏优化
- //
- // Created by apple 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;
- }
复制代码 |
|