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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 堕落天使 高级黑马   /  2015-9-17 19:46  /  756 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文


代码稍微多一些的一个小游戏,也可以说是《迷宫》游戏的升级版。注意数组名当函数参数是地址传递。
  1. #include <stdio.h>
  2. #define kRows 10
  3. #define kCols 11
  4. /**
  5. *  打印地图
  6. *
  7. *  @param map 地图数组
  8. */
  9. void map1(char map[kRows][kCols]){
  10.     for (int i =0; i<10; i++) {
  11.         printf("%s\n",map[i]);
  12.     }
  13. }
  14. /**
  15. *  移动小人,或者箱子
  16. *
  17. *  @param map  地图数组
  18. *  @param oldX 当前的位置x
  19. *  @param oldY 当前位置y
  20. *  @param newX 移动后位置x
  21. *  @param newY 移动后位置y
  22. */
  23. void move1(char map[kRows][kCols],int oldX,int oldY,int newX,int newY){
  24.     char temp;
  25.     temp=map[oldX][oldY];
  26.     map[oldX][oldY]=map[newX][newY];
  27.     map[newX][newY]=temp;
  28. }
  29. int main(int argc, const char * argv[]) {
  30.     char map[kRows][kCols]={
  31.     "##########",
  32.     "#o ####  #",
  33.     "# X####  #",
  34.     "#        #",
  35.     "######   #",
  36.     "#  ####  #",
  37.     "#        #",
  38.     "#   ######",
  39.     "#         ",
  40.     "##########",};
  41.     int personX=1;
  42.     int personY=1;
  43.     int personNextX =1;
  44.     int personNextY =1;
  45.     char direction,ch1;
  46.     char street = ' ';
  47.     char box = 'X';
  48.     int boxX=2;
  49.     int boxY=2;
  50.     int boxNextX,boxNextY;
  51.     printf("请控制小人移动:w上,s下,a左,d右!\n");
  52.    
  53.     while (1) {
  54.         map1(map);
  55.         scanf("%c,%c",&direction,&ch1);//ch1接受回车符。
  56.         //防止小人碰到墙之后,无法正常移动小人。
  57.         personNextX=personX;
  58.         personNextY=personY;
  59.         switch (direction) {
  60.             case 'w':
  61.             case 'W':
  62.                 personNextX=personX-1;
  63.                 break;
  64.             case 's':
  65.             case 'S':
  66.                 personNextX=personX+1;
  67.                 break;
  68.             case 'a':
  69.             case 'A':
  70.                 personNextY=personY-1;
  71.                 break;
  72.             case 'd':
  73.             case 'D':
  74.                 personNextY=personY+1;
  75.                 break;
  76.             case 'q':
  77.             case 'Q':
  78.                 printf("你退出了游戏!\n");
  79.                 return 0;
  80.             default:
  81.                 break;
  82.         }
  83.         if (map[personNextX][personNextY]==street) {
  84.             move1(map, personX, personY, personNextX, personNextY);
  85.             personX=personNextX;
  86.             personY=personNextY;
  87.             
  88.         }else if (map[personNextX][personNextY]==box){
  89.             
  90.            
  91.             boxNextX=boxX+(boxX-personX);
  92.             boxNextY=boxY+(boxY-personY);
  93.             if (map[boxNextX][boxNextY]==street) {
  94.                 move1(map, boxX, boxY, boxNextX, boxNextY);
  95.                 move1(map, personX, personY, personNextX, personNextY);
  96.                 personX=personNextX;
  97.                 personY=personNextY;
  98.                 boxX=boxNextX;
  99.                 boxY=boxNextY;
  100.                            }
  101.         }
  102.         if (boxY==kCols-2) {
  103.             
  104.             printf("你出来了!\n");
  105.             break;
  106.         }
  107.     }
  108.     return 0;
  109. }
复制代码




0 个回复

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