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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

  1. //
  2. //  main.c
  3. //  MazeRunning
  4. //
  5. //  Created by amos on 9/25/15.
  6. //  Copyright (c) 2015 augmentum. All rights reserved.
  7. //
  8. #define Row 10
  9. #define Col 10

  10. #include <stdio.h>

  11. //定义变量记录当前位置
  12. int currentX = 0, currentY = 0, steps = 0;
  13. int nextX = 0, nextY = 0;


  14. //打印迷宫
  15. void showMaze(char maze[10][10]){
  16.     for (int i = 0; i < Row; i++) {
  17.         for (int j = 0; j < Col; j++) {
  18.             printf("%c", maze[i][j]);
  19.         }
  20.         printf("\n");
  21.     }
  22. }
  23. //判断是否可走
  24. int isAvaliable(char maze[][10],int x, int y){
  25.     if (x > 10 || x < 0 || y > 10 > y < 0||
  26.         '#' == maze[x][y]) {
  27.         return 0;
  28.     }else{
  29.         return 1;
  30.     }
  31. }

  32. //交换小人儿('0')位置和迷宫格(" ")位置
  33. void swap(char maze[10][10]){
  34.     char temp = maze[currentX][currentY];
  35.     maze[currentX][currentY] = maze[nextX][nextY];
  36.     maze[nextX][nextY] = temp;
  37.     steps++;
  38.     currentX = nextX;
  39.     currentY = nextY;
  40.     showMaze(maze);
  41. }
  42. //开始行走
  43. void startGame(char maze[10][10]){

  44.    
  45.     char direction;   //存储用户输入的方向:上W,下S,左A,右D
  46.     char temp;        //用来吸收键盘输入的\n
  47.     int dX = 0,dY = 0;//小人儿下一步x轴与y轴变化
  48.    
  49.     while (1) {
  50.         //等待用户输入方向
  51.         printf("\n输入下一步走向(上W,下S,左A,右D):");
  52.         scanf("%c",&direction);
  53.         scanf("%c",&temp);
  54.         
  55.         switch (direction) {
  56.             //向上
  57.             case 'W':
  58.             case 'w':
  59.                 dX = -1; dY = 0;
  60.                 break;
  61.             //向下
  62.             case 'S':
  63.             case 's':
  64.                 dX = 1; dY = 0;
  65.                 break;
  66.             //向左
  67.             case 'A':
  68.             case 'a':
  69.                 dX = 0; dY = -1;
  70.                 break;
  71.             //向右
  72.             case 'D':
  73.             case 'd':
  74.                 dX = 0; dY = 1;
  75.                 break;
  76.             case 'Q':
  77.             case 'q':
  78.                 printf("正在退出游戏.....");
  79.                 return;
  80.             default:
  81.                 //printf("按键错误.....");
  82.                 break;
  83.         }
  84.         nextX = currentX + dX;
  85.         nextY = currentY + dY;
  86.         
  87.         if (isAvaliable(maze, nextX, nextY)) {
  88.             swap(maze);
  89.             //交换后查看当前位置是否已经到达门口
  90.             if(currentY == 9){
  91.                 printf("X = %d, Y = %d\n",currentX,currentY);
  92.                 printf("Congradulations! You take %d steps in total!", steps);
  93.                 return ;
  94.             }
  95.         }
  96.     }
  97.    
  98. }

  99. int main(int argc, const char * argv[])
  100. {
  101.     //初始化迷宫
  102.     char maze[Row][Col] =  {
  103.         
  104.         {'0','#','#','#','#','#','#','#','#','#'},
  105.         {' ',' ','#','#','#','#',' ',' ',' ','#'},
  106.         {'#',' ','#','#','#','#',' ','#',' ','#'},
  107.         {'#',' ',' ',' ',' ','#',' ','#',' ','#'},
  108.         {'#',' ',' ','#',' ',' ',' ',' ','#','#'},
  109.         {'#','#',' ','#',' ','#','#',' ',' ','#'},
  110.         {'#','#',' ','#',' ','#','#',' ',' ','#'},
  111.         {'#','#',' ','#',' ','#','#','#',' ','#'},
  112.         {'#','#',' ',' ',' ','#','#','#',' ','M'},
  113.         {'#','#','#','#','#','#','#','#','#','#'}
  114.     };
  115.     //首次显示迷宫供玩儿家看
  116.     showMaze(maze);
  117.     //开始游戏
  118.     startGame(maze);
  119.     return 0;
  120. }
复制代码


0 个回复

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