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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

  1. //
  2. //  main.c
  3. //  17-《迷宫》游戏优化
  4. //
  5. //  Created by apple on 15/1/5.
  6. //  Copyright (c) 2015年 itcast. All rights reserved.
  7. //

  8. #include <stdio.h>
  9. #define COL 12
  10. #define ROW 6
  11. /**
  12. *  打印地图
  13. *
  14. *  @param map 地图的数组
  15. */
  16. void printMap(char map[ROW][COL]){

  17.     for (int i=0; i<ROW; i++) {
  18.         for (int j=0; j<COL; j++) {
  19.             printf("%c",map[i][j]);
  20.         }
  21.         printf("\n");
  22.     }

  23. }

  24. /**
  25. *  实现了小人的移动
  26. *
  27. *  @param map  地图的数组
  28. *  @param oldX 小人的原来位置X坐标
  29. *  @param oldY 小人的原来位置Y坐标
  30. *  @param newX 小人的将要移动到位置X坐标
  31. *  @param newY 小人的将要移动到位置Y坐标
  32. */
  33. void personMove(char map[ROW][COL],int oldX,int oldY,int newX,int newY){

  34.     char temp;
  35.     temp = map[oldX][oldY];
  36.     map[oldX][oldY] = map[newX][newY];
  37.     map[newX][newY] = temp;

  38. }

  39. int main(int argc, const char * argv[]) {
  40.    
  41.    
  42.     //****** 定义变量     **********
  43.    
  44.     //1、定义变量,地图、存储用户输入的方向、小人的位置
  45.         char map[ROW][COL]={
  46.                 {'#','#','#','#','#','#','#','#','#','#','#','#'},
  47.                 {'#','O','#','#',' ',' ',' ','#','#','#','#','#'},
  48.                 {'#',' ','#','#',' ','#',' ','#',' ',' ',' ','#'},
  49.                 {'#',' ',' ','#',' ','#',' ','#',' ','#',' ','#'},
  50.                 {'#','#',' ',' ',' ','#',' ',' ',' ','#',' ',' '},
  51.                 {'#','#','#','#','#','#','#','#','#','#','#','#'}
  52.             };
  53.    
  54.     //保存用户输入的方向
  55.     char direction;
  56.    
  57.     //定义变量保存小人的当前的位置
  58.     int currentX=1;
  59.     int currentY=1;
  60.    
  61.     //定义变量保存路
  62.     char street = ' ';
  63.    
  64.     //2、先打印一遍地图
  65.     printMap(map);
  66.    
  67.     //3、提示用户游戏玩法
  68.     printf("请控制小人移动: w.上  s.下  a.左   d.右   q.退出\n");

  69.     //****** 要进行循环控制 *********
  70.     while (1) {
  71.         
  72.         //4、接收用户输入的方向
  73.         scanf("%c",&direction);
  74.         getchar();  //吸收多余的 \n
  75.         //5、判断用户输入了什么方向
  76.         switch (direction) {
  77.             case 'w':
  78.             case 'W':
  79.                
  80.                 //****** 判断小人能否移动 ********
  81.                
  82.                 //6、判断小人是否能够移动
  83.                 if (map[currentX-1][currentY]==street) {
  84.                     //         核心要知道小人的下一个位置是否是路
  85.                     //         是路
  86.                     //            让小人开始移动,移动的核心:小人和路交换
  87.                   
  88.                     // map[currentX][currentY]; 小人当前位置
  89.                     // map[currentX-1][currentY];小人的下一个位置
  90.                     personMove(map,currentX,currentY,currentX-1,currentY);
  91.                     //重新记录小人的当前位置
  92.                     currentX--;
  93.                     
  94.                 }
  95.                 //         不是路 ,什么也不干
  96.                 break;
  97.                
  98.             case 's':
  99.             case 'S':
  100.                 if (map[currentX+1][currentY]==street) {
  101.                     //         核心要知道小人的下一个位置是否是路
  102.                     //         是路
  103.                     //            让小人开始移动,移动的核心:小人和路交换
  104.                     personMove(map,currentX,currentY,currentX+1,currentY);
  105.                     //重新记录小人的当前位置
  106.                     currentX++;
  107.                     
  108.                 }
  109.                 break;
  110.                
  111.             case 'a':
  112.             case 'A':
  113.                 if (map[currentX][currentY-1]==street) {
  114.                     //         核心要知道小人的下一个位置是否是路
  115.                     //         是路
  116.                     //            让小人开始移动,移动的核心:小人和路交换
  117.                     
  118.                     personMove(map,currentX,currentY,currentX,currentY-1);
  119.                     //重新记录小人的当前位置
  120.                     currentY--;
  121.                     
  122.                 }
  123.                 break;
  124.                
  125.             case 'd':
  126.             case 'D':
  127.                 if (map[currentX][currentY+1]==street) {
  128.                     //         核心要知道小人的下一个位置是否是路
  129.                     //         是路
  130.                     //            让小人开始移动,移动的核心:小人和路交换
  131.                     personMove(map,currentX,currentY,currentX,currentY+1);
  132.                     //重新记录小人的当前位置
  133.                     currentY++;
  134.                     
  135.                 }
  136.                 break;
  137.                
  138.             case 'q':
  139.             case 'Q':
  140.                 return 0;
  141.                 break;
  142.                
  143.             default:
  144.                 break;
  145.         }
  146.         
  147.         //7、重绘地图
  148.         printMap(map);
  149.         
  150.         //****** 判断是否走出来   ********
  151.         //判断 y 的值是否 == 5
  152.         if (currentY==COL-1) {
  153.             printf("哇哦,你出来了!\n");
  154.             break;
  155.         }
  156.         //      提示走出迷宫了
  157.         //      break;游戏要结束
  158.     }
  159.    
  160.     return 0;
  161. }
复制代码

9 个回复

倒序浏览
。。。。。。。。。。
回复 使用道具 举报
看着好屌的样子,还没看到呢,学到了试试.
回复 使用道具 举报
这是死循环实现的嘛  还没学到呢  谢谢分享
回复 使用道具 举报
好厉害,对C没有兴趣的路过
回复 使用道具 举报
好厉害,对C没有兴趣的路过,谢谢分享
回复 使用道具 举报
Vigor 中级黑马 2015-8-31 23:01:32
7#
谢谢分享!
回复 使用道具 举报
哇哈哈   我昨天刚打完  但是还没有优化
回复 使用道具 举报
看起来好牛逼的样子,新手,慢慢来
回复 使用道具 举报
推箱子要更难一点,逻辑类似
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马