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

  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没有兴趣的路过,谢谢分享
回复 使用道具 举报
哇哈哈   我昨天刚打完  但是还没有优化
回复 使用道具 举报
看起来好牛逼的样子,新手,慢慢来
回复 使用道具 举报
推箱子要更难一点,逻辑类似
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马