经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » C 语言 » 查看文章
C语言实现推箱子游戏
来源:jb51  时间:2018/11/20 10:14:24  对本文有异议

每天学习一点点,每天容易一点点。一个简单的C语言程序,用来复习c语言,代码通俗易懂。有什么问题望各位不吝赐教。

本文用最简单的C语言语句写个推箱子的程序,分享给大家:

  1. /*******************************************
  2. 用最简单的C语言语句写个推箱子的程序。
  3.  
  4.  
  5. ********************************************/
  6. #include <stdio.h>
  7. #include <conio.h>
  8. #include<stdlib.h>
  9.  
  10. int map[9][11] = {
  11. {0,1,1,1,1,1,1,1,1,1,0}, //0代表空地
  12. {0,1,0,0,0,1,0,0,0,1,0}, //1代表墙
  13. {0,1,0,4,4,4,4,4,0,1,0}, //3代表目的地
  14. {0,1,0,4,0,4,0,4,0,1,1}, //4代表箱子
  15. {0,1,0,0,0,0,0,0,4,0,1}, //5代表人
  16. {1,1,0,1,1,1,1,0,4,0,1},
  17. {1,0,8,3,3,3,3,1,0,0,1}, //2 3 4 5 6 7 8 9 1 0
  18. {1,0,3,3,3,3,3,0,0,1,1},
  19. {1,1,1,1,1,1,1,1,1,1,0} };
  20.  
  21. //绘制地图 //二维数组+switch()
  22. void DrawMap()
  23. {
  24. //遍历二维数组 //0 打印空格 //1 墙 //3 目的地 //什么结构?
  25. for (int i = 0; i < 9; i++)
  26. {
  27. for (int j = 0; j < 11; j++)
  28. {
  29. //if else switch
  30. switch (map[i][j])
  31. {
  32. case 0:
  33. printf(" ");
  34. break;
  35. case 1:
  36. printf("■");
  37. break;
  38. case 3:
  39. printf("☆");
  40. break;
  41. case 4:
  42. printf("□");
  43. break;
  44. case 5:
  45. printf("♀"); //5人
  46. break;
  47. case 7: //4 + 3 箱子在目的地中
  48. printf("★");
  49. break;
  50. case 8: // 5 + 3 人在目的地当中 人?
  51. printf("♀");
  52. break;
  53. }
  54. }
  55. printf("\n");
  56. }
  57. }
  58.  
  59.  
  60. void PlayGame()
  61. {
  62. int r, c; //人的下标 //
  63. for (int i = 0; i < 9; i++)
  64. {
  65. for (int j = 0; j < 11; j++)
  66. {
  67. if (map[i][j] == 5||map[i][j]==8) //i j 人的下标?
  68. {
  69. r = i;
  70. c = j;
  71. }
  72. }
  73. }
  74.  
  75. char ch; //字符变量
  76. ch = getch(); //键盘的输入保存到字符中
  77. // getch() getchar() 接收键盘字符
  78. // getch()直接接收 不显示回文 getchar()显示回文可以修改 enter键结束
  79.  
  80. //根据不同的按键 改变不同的值. 分支.
  81. switch (ch)
  82. {
  83. case 'W': //W A S D方向 72 80 75 77 虚拟键值 ascii windowVK_UP VK_TAB VK_RETUNE
  84. case 'w':
  85. case 72:
  86. if (map[r - 1][c] == 0|| map[r - 1][c] == 3)
  87. {
  88. map[r - 1][c] += 5;
  89. map[r][c] -= 5;
  90. }
  91. else if (map[r - 1][c] == 4 || map[r - 1][c] == 7)
  92. {
  93. if (map[r - 2][c] == 0 || map[r - 2][c] == 3)
  94. {
  95. map[r - 2][c] += 4;
  96. map[r - 1][c] += 1;
  97. map[r][c] -= 5;
  98. }
  99. }
  100.  
  101.  
  102.  
  103. break;
  104.  
  105. case 'S': //enter按键的作用 确认 返回
  106. case 's':
  107. case 80:
  108. if (map[r + 1][c] == 0 || map[r + 1][c] == 3)
  109. {
  110. map[r + 1][c] += 5;
  111. map[r][c] -= 5;
  112. }
  113. else if (map[r + 1][c] == 4 || map[r+ 1][c] == 7)
  114. {
  115. if (map[r + 2][c] == 0 || map[r + 2][c] == 3)
  116. {
  117. map[r + 2][c] += 4;
  118. map[r + 1][c] += 1;
  119. map[r][c] -= 5;
  120. }
  121. }
  122. break;
  123.  
  124. case 'A':
  125. case 'a':
  126. case 75:
  127. if (map[r ][c - 1] == 0 || map[r ][c - 1] == 3)
  128. {
  129. map[r ][c - 1] += 5;
  130. map[r][c] -= 5;
  131. }
  132. else if (map[r][c - 1] == 4 || map[r][c - 1] == 7)
  133. {
  134. if (map[r ][c - 2] == 0 || map[r ][c - 2] == 3)
  135. {
  136. map[r ][c - 2] += 4;
  137. map[r ][c - 1] += 1;
  138. map[r][c] -= 5;
  139. }
  140. }
  141. break;
  142.  
  143. case 'D':
  144. case 'd':
  145. case 77:
  146. if (map[r][c + 1] == 0 || map[r][c + 1] == 3)
  147. {
  148. map[r][c + 1] += 5;
  149. map[r][c] -= 5;
  150. }
  151. else if (map[r][c + 1] == 4 || map[r][c + 1] == 7)
  152. {
  153. if (map[r][c + 2] == 0 || map[r][c + 2] == 3)
  154. {
  155. map[r][c + 2] += 4;
  156. map[r][c + 1] += 1;
  157. map[r][c] -= 5;
  158. }
  159. }
  160. break;
  161. }
  162. }
  163.  
  164. //
  165. int main() //主函数
  166. {
  167. while (1)
  168. {
  169. system("cls");
  170. DrawMap();
  171. PlayGame();
  172. }
  173.  
  174. return 0;
  175. }
  176.  
  177. //通过按键来实现游戏 ---> 通过按键来改变二维数组的排列顺序.
  178. //思考一个问题? 地图是二维数组来决定的. 人在哪里 二维数组来决定?
  179.  
  180. /************************************************
  181. //人推箱子
  182. 可以动. 怎么办. 改变元素
  183. 1.人的前面是空地
  184. 2.人的前面是目的地
  185. 3.人的前面是箱子
  186. 3.1 箱子的前面是空地
  187. 3.2 箱子的前面是目的地
  188.  
  189.  
  190. //盘断二维数组中有几个7
  191. //没有目的地 不对.. 人站在目的地
  192. //有没有4.
  193. ****************************************/

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持w3xue。

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号