在处理移动的时候有太多种情况了:

1、有空位

2、在推箱子,推到了空地

3、推箱子推到了目标,

4、推目标位的箱子推到另一个目标

5、推目标位的箱子推到空地

首先记录目标位置,在每次推动之后会再绘画中自动修正目标位置的情况

修改地图之后发现不能将上述情况的5实现,还要再改。

接下来应该尝试如何实现多个关卡或者从文件中读取地图信息

  1. #include<iostream>
  2. #include<graphics.h>
  3. #include<conio.h>
  4. #include<vector>
  5. using namespace std;
  6. //0空白,1墙,2人,3箱子,4目标,5箱子与目标,6人与目标
  7. int x, y,temp;
  8. vector<int>goalx, goaly;
  9. int mapp[][] = {,,,,, ,,,,,, ,,,, ,,,, ,,,, ,,, ,,,, ,,,, ,,,,, ,
  10. ,,,,, ,,,,,,,,,,,,,,,, ,,,, ,,, ,,,, ,,,, ,,, ,
  11. ,,,,,,,,,,,,, ,,,, ,,,, ,,,, ,,, ,,,, ,,,, ,,,,
  12. ,,,,, ,,,,,,,, ,,,, ,,,, ,,,, ,,, ,,,, ,,,, ,,, ,
  13. ,,,,, ,,,,,,,, ,,,, ,,,, ,,,, ,,, ,,,, ,,,, ,,, ,
  14. ,,,,, ,,,,,,,, ,,,, ,,,, ,,,, ,,, ,,,, ,,,, ,,, ,
  15. ,,,,, ,,,,,,,, ,,,, ,,,, ,,,, ,,, ,,,, ,,,, ,,, ,
  16. ,,,,, ,,,,,,,, ,,,, ,,,, ,,,, ,,, ,,,, ,,,, ,,, ,
  17. ,,,,, ,,,,,,,, ,,,, ,,,, ,,,, ,,, ,,,, ,,,, ,,, ,
  18. ,,,,, ,,,,,,,, ,,,, ,,,, ,,,, ,,, ,,,, ,,,, ,,, ,
  19. ,,,,, ,,,,,,,, ,,,, ,,,, ,,,, ,,, ,,,, ,,,, ,,, ,
  20. ,,,, ,,,,,,,, ,,,, ,,,, ,,,, ,,, ,,,, ,,,, ,,,, ,
  21. ,,,, ,,,,,,,, ,,,, ,,,, ,,,, ,,, ,,,, ,,,, ,,,, ,
  22. ,,,, ,,,,,,,, ,,,, ,,,, ,,,, ,,, ,,,, ,,,, ,,,, ,
  23. ,,,, ,,,,,,,, ,,,, ,,,, ,,,, ,,, ,,,, ,,,, ,,,, ,
  24. ,,,, ,,,,,,,, ,,,, ,,,, ,,,, ,,, ,,,, ,,,, ,,,, ,
  25. ,,,, ,,,,,,,, ,,,, ,,,, ,,,, ,,, ,,,, ,,,, ,,,, ,
  26. ,,,, ,,,,,,,, ,,,, ,,,, ,,,, ,,, ,,,, ,,,, ,,,, ,
  27. ,,,, ,,,,,,,, ,,,, ,,,, ,,,, ,,, ,,,, ,,,, ,,,, ,
  28. ,,,, ,,,,,,,, ,,,, ,,,, ,,,, ,,, ,,,, ,,,, ,,,, ,
  29. ,,,, ,,,,,,,, ,,,, ,,,, ,,,, ,,, ,,,, ,,,, ,,,, ,
  30. ,,,, ,,,,,,,, ,,,, ,,,, ,,,, ,,, ,,,, ,,,, ,,,, ,
  31. ,,,, ,,,,,,,, ,,,, ,,,, ,,,, ,,, ,,,, ,,,, ,,,, ,
  32. ,,,, ,,,,,,,, ,,,, ,,,, ,,,, ,,, ,,,, ,,,, ,,,, ,
  33. ,,,, ,,,,,,,, ,,,, ,,,, ,,,, ,,, ,,,, ,,,, ,,,, ,
  34. ,,,, ,,,,,,,, ,,,, ,,,, ,,,, ,,, ,,,, ,,,, ,,,, ,
  35. ,,,, ,,,,,,,, ,,,, ,,,, ,,,, ,,, ,,,, ,,,, ,,,, ,
  36. ,,,, ,,,,,,,, ,,,, ,,,, ,,,, ,,, ,,,, ,,,, ,,,, ,
  37. ,,,, ,,,,,,,, ,,,, ,,,, ,,,, ,,, ,,,, ,,,, ,,,, ,
  38. ,,,, ,,,,,,,, ,,,, ,,,, ,,,, ,,, ,,,, ,,,, ,,,,
  39. };
  40. void scann() {
  41. int i, j;
  42. for (i = ; i < ; i++) {
  43. for (j = ; j < ; j++) {
  44. if (mapp[i][j] >= ) {
  45. goalx.push_back(i);
  46. goaly.push_back(j);
  47. }
  48. }
  49. }
  50. }
  51. void drawmapp() {
  52. int i, j,k;
  53. for (i = ; i < ; i++) {
  54. for (j = ; j < ; j++) {
  55. for (k = ; k < goalx.size(); k++) {
  56. if (i == goalx[k] && j == goaly[k]) {
  57. if (mapp[i][j] == ) {
  58. mapp[i][j] = ;
  59. }
  60. if (mapp[i][j] == ) {
  61. mapp[i][j] = ;
  62. }
  63. if (mapp[i][j] == ) {
  64. mapp[i][j] = ;
  65. }
  66.  
  67. }
  68. }
  69. switch (mapp[i][j]) {
  70. case :
  71. setlinecolor(RGB(,,));
  72. setfillcolor(RGB(, , ));
  73. fillrectangle(j * , i * , j * + , i * + );
  74. break;
  75. case :
  76. x = i;
  77. y = j;
  78. setlinecolor(RGB(, , ));
  79. setfillcolor(RGB(, , ));
  80. fillrectangle(j * , i * , j * + , i * + );
  81. break;
  82. case :
  83. setlinecolor(RGB(, , ));
  84. setfillcolor(RGB(, , ));
  85. fillrectangle(j * , i * , j * + , i * + );
  86. break;
  87. case :
  88. setlinecolor(RGB(, , ));
  89. setfillcolor(RGB(, , ));
  90. fillrectangle(j * , i * , j * + , i * + );
  91. break;
  92. case :
  93. setlinecolor(RGB(, , ));
  94. setfillcolor(RGB(, , ));
  95. fillrectangle(j * , i * , j * + , i * + );
  96. break;
  97. case :
  98. x = i;
  99. y = j;
  100. setlinecolor(RGB(, , ));
  101. setfillcolor(RGB(, , ));
  102. fillrectangle(j * , i * , j * + , i * + );
  103. break;
  104. }
  105. }
  106. }
  107. }
  108. void keyDown() {
  109. char ch = '\0';
  110. ch = _getch();
  111. switch (ch)
  112. {
  113. case 'w':
  114. case 'W':
  115. if (mapp[x - ][y] == ) {
  116. temp = mapp[x][y];
  117. mapp[x][y] = mapp[x - ][y];
  118. mapp[x - ][y] =;
  119. }
  120. if (mapp[x - ][y] == ) {
  121. mapp[x][y] = ;
  122. mapp[x - ][y] = ;
  123. }
  124. if (mapp[x - ][y] == && mapp[x-][y]==) {
  125. mapp[x-][y] = ;
  126. mapp[x - ][y] = ;
  127. mapp[x][y] = ;
  128. }
  129. if (mapp[x - ][y] == && mapp[x - ][y] == ) {
  130. mapp[x - ][y] = ;
  131. mapp[x - ][y] = ;
  132. mapp[x][y] = ;
  133. }
  134. if (mapp[x - ][y] == && mapp[x - ][y] == ) {
  135. mapp[x - ][y] = ;
  136. mapp[x - ][y] = ;
  137. mapp[x][y] = ;
  138. }
  139. if (mapp[x - ][y] == && mapp[x - ][y] == ) {
  140. mapp[x - ][y] = ;
  141. mapp[x - ][y] = ;
  142. mapp[x][y] = ;
  143. }
  144.  
  145. break;
  146. case 'a':
  147. case 'A':
  148. if (mapp[x][y-] == ) {
  149. temp = mapp[x][y];
  150. mapp[x][y] = mapp[x][y-];
  151. mapp[x][y-] =;
  152. }
  153. if (mapp[x][y-] == ) {
  154. mapp[x][y] = ;
  155. mapp[x][y-] = ;
  156. }
  157. if (mapp[x][y-] == && mapp[x][y-] == ) {
  158. mapp[x][y-] = ;
  159. mapp[x][y-] = ;
  160. mapp[x][y] = ;
  161. }
  162. if (mapp[x][y - ] == && mapp[x][y - ] == ) {
  163. mapp[x][y - ] = ;
  164. mapp[x][y - ] = ;
  165. mapp[x][y] = ;
  166. }
  167. if (mapp[x][y - ] == && mapp[x][y - ] == ) {
  168. mapp[x][y - ] = ;
  169. mapp[x][y - ] = ;
  170. mapp[x][y] = ;
  171. }
  172. if (mapp[x][y - ] == && mapp[x][y - ] ==) {
  173. mapp[x][y - ] = ;
  174. mapp[x][y - ] = ;
  175. mapp[x][y] = ;
  176. }
  177. break;
  178. case 's':
  179. case 'S':
  180. if (mapp[x + ][y] == ) {
  181. temp = mapp[x][y];
  182. mapp[x][y] = mapp[x + ][y];
  183. mapp[x + ][y] =;
  184. }
  185. if (mapp[x + ][y] == ) {
  186. mapp[x][y] = ;
  187. mapp[x + ][y] = ;
  188. }
  189. if (mapp[x + ][y] == && mapp[x + ][y] == ) {
  190. mapp[x + ][y] = ;
  191. mapp[x + ][y] = ;
  192. mapp[x][y] = ;
  193. }
  194. if (mapp[x + ][y] == && mapp[x + ][y] == ) {
  195. mapp[x + ][y] = ;
  196. mapp[x + ][y] = ;
  197. mapp[x][y] = ;
  198. }
  199. if (mapp[x + ][y] == && mapp[x + ][y] == ) {
  200. mapp[x + ][y] = ;
  201. mapp[x + ][y] = ;
  202. mapp[x][y] = ;
  203. }
  204. if (mapp[x + ][y] == && mapp[x + ][y] == ) {
  205. mapp[x + ][y] = ;
  206. mapp[x + ][y] = ;
  207. mapp[x][y] = ;
  208. }
  209. break;
  210. case 'd':
  211. case 'D':
  212. if (mapp[x][y+] == ) {
  213. mapp[x][y] = mapp[x][y+];
  214. mapp[x][y+] =;
  215. }
  216. if (mapp[x][y+] == ) {
  217. mapp[x][y] = ;
  218. mapp[x][y+] = ;
  219. }
  220. if (mapp[x][y+] == && mapp[x][y+] == ) {
  221. mapp[x][y+] = ;
  222. mapp[x][y+] = ;
  223. mapp[x][y] = ;
  224. }
  225. if (mapp[x][y + ] == && mapp[x][y + ] == ) {
  226. mapp[x][y + ] = ;
  227. mapp[x][y + ] = ;
  228. mapp[x][y] = ;
  229. }
  230. if (mapp[x][y + ] == && mapp[x][y + ] == ) {
  231. mapp[x][y + ] = ;
  232. mapp[x][y + ] = ;
  233. mapp[x][y] = ;
  234. }
  235. if (mapp[x][y + ] == && mapp[x][y + ] ==) {
  236. mapp[x][y + ] = ;
  237. mapp[x][y + ] = ;
  238. mapp[x][y] = ;
  239. }
  240. break;
  241. default:
  242. break;
  243. }
  244. }
  245. int main() {
  246. int kl;
  247. bool checkk;
  248. HWND hwnd=initgraph(, );
  249. setbkcolor(RGB(,,));
  250. cleardevice();
  251. drawmapp();
  252. scann();
  253. while (true) {
  254. checkk = true;
  255. settextcolor(BLACK);
  256. outtextxy(, , "WASD控制");
  257. keyDown();
  258. cleardevice();
  259. drawmapp();
  260. for (kl = ; kl < goalx.size(); kl++) {
  261. if (mapp[goalx[kl]][goaly[kl]] != ) checkk = false;
  262. }
  263. if (checkk) {
  264. MessageBox(hwnd, "Finish", "Finish!", );
  265. break;
  266. }
  267. }
  268. system("pause");
  269. return ;
  270.  
  271. }

C++简单项目--推箱子的更多相关文章

  1. 用C写一个简单的推箱子游戏(二)

    下面接着上一篇随笔<用C写一个简单的推箱子游戏(一)>来写 tuidong()函数是用来判断游戏人物前方情况的函数,是推箱子游戏中非常重要的一个函数,下面从它开始继续介绍推箱子的小程序怎么 ...

  2. 用C写一个简单的推箱子游戏(一)

    我现在在读大二,我们有一门课程叫<操作系统>,课程考查要求我们可以写一段程序或者写Windows.iOS.Mac的发展历程.后面我结合网上的资料参考,就想用自己之前简单学过的C写一关的推箱 ...

  3. C++学习(九)(C语言部分)之 项目 推箱子游戏

    游戏制作 推箱子 步骤分析 1.模板 2.模板分析 组成元素: 空地 墙 人 目的地 箱子 背景 3.如何操作 通过WASD键盘操作人,推着箱子,到达目的地,游戏结束,如果箱子卡在死角则游戏失败 4. ...

  4. c++、c实现推箱子小游戏

    经过四次的修改和优化,终于将推箱子这个游戏完整的写出来了,今天就像大家分享一下这个游戏的编写. 这个游戏界面的编写总的来说不困难,主要是推动箱子的算法. (1)利用数组和windows api 即可写 ...

  5. c#部分---网吧充值系统;简易的闹钟;出租车计费;简单计算器;对战游戏;等额本金法计算贷款还款利息等;随机生成10个不重复的50以内的整数;推箱子;

    网吧充值系统namespace ConsoleApplication1 { class Program { struct huiyuan { public string name; public st ...

  6. C/C++编程笔记:C语言写推箱子小游戏,大一学习C语言练手项目

    C语言,作为大多数人的第一门编程语言,重要性不言而喻,很多编程习惯,逻辑方式在此时就已经形成了.这个是我在大一学习 C语言 后写的推箱子小游戏,自己的逻辑能力得到了提升,在这里同大家分享这个推箱子小游 ...

  7. 每个人都可以用C语言写的推箱子小游戏!今天你就可以写出属于自己项目~

    C语言,作为大多数人的第一门编程语言,重要性不言而喻,很多编程习惯,逻辑方式在此时就已经形成了.这个是我在大一学习 C语言 后写的推箱子小游戏,自己的逻辑能力得到了提升,在这里同大家分享这个推箱子小游 ...

  8. 完整版本的推箱子小游戏,最简单的纯C语言打造

    /* 推箱子小游戏 1.定义绘制样式 用二维数组的方式 2.绘制图像 3.找出当前位置 4.逻辑判断,制造动作 根据数学xy轴的规律,这里使用ij 上移,行轴上升,行数减少 下移,行数下降,函数增加 ...

  9. c语言推箱子 扫雷项目

    推箱子 两关的推箱子用到一个三维数组 用到的图片数据如下 https://pan.baidu.com/s/1IDE4GQLo46cxNywDqwxmlQ 密码:jdel 代码如下: #include& ...

随机推荐

  1. OpenStack组件系列☞Keystone搭建

    一:版本信息 官网:http://docs.openstack.org/newton/install-guide-rdo/keystone.html 二:部署keystone 官网文档:http:// ...

  2. swiper仿tab栏切换

    转载  https://developers.weixin.qq.com/community/develop/article/doc/000040a5dc4518005d2842fdf51c13 小程 ...

  3. ngRoute

    ngRoute 模块中包含以下内容, 名称 所属 作用 ngView DIRECTIVE 提供不同路由模板插入的视图层 $routeProvider PROVIDER 提供路由配置 $route SE ...

  4. 最小生成树kruskal算法、

    克鲁斯卡尔(kruskal) //kruskal算法生成最小生成树. //对边集数组Edge结构的定义 typedef struct { int begin; int end; int weight; ...

  5. Redux 初始化完整结构

    文件管理 目录文档 ★★★index.js★★★ ★★★app.js★★★ ★★★store->index.js★★★ ★★★actions->index.js★★★ ★★★store-& ...

  6. H3C DHCP服务器基本配置示例

  7. 51nod 天气晴朗的魔法 - (Kruskall最小生成树)

    题目: 基准时间限制:1 秒 空间限制:131072 KB  51nod魔法学校近日开展了主题为“天气晴朗”的魔法交流活动.   N名魔法师按阵法站好,之后选取N - 1条魔法链将所有魔法师的魔力连接 ...

  8. C# 将 Begin 和 End 异步方法转 task 异步

    在 .NET Framework 有两个不同的异步方法,一个是 Asynchronous Programming Model (APM) 另一个是 Task-based asynchronous pa ...

  9. 备战省赛组队训练赛第七场(UPC)

    传送门   日文题解:戳这里

  10. Linux 内核 回顾: ISA

    设计上 ISA 总线非常老了, 并且是非常地低能, 但是它仍然持有一块挺大的控制设备的 市场. 如果速度不重要并且你想支持老式主板, 一个 ISA 实现要优于 PCI. 这个老标准 的另外一个好处是如 ...