小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

純C寫的小游戲

 孤獨(dú)一兵 2016-11-23

很多編程愛好者都編寫過推箱子游戲編程吧,最近有好些朋友看見我以前的推箱子程序后,

問我是怎么做的。我一直想把這個(gè)程序的整個(gè)過程寫一份詳細(xì)的東西,與各位編程愛好者分享,一直沒空。正好現(xiàn)在放假了,而且離回家還有幾天。于是我就把這個(gè)程序重新寫了一遍,盡量使程序的結(jié)構(gòu)比較清晰好懂一些。同時(shí)寫了下面的這份東西。

純C寫的小游戲-----最炫酷推箱子

純C寫的小游戲-----推箱子 (加群: 571545210 學(xué)習(xí)編程,在群里獲得更多的學(xué)習(xí)資料)

通過w,s,a,d實(shí)現(xiàn)上下左右的移動(dòng)

聲明畫圖函數(shù)

然后分別對(duì)移動(dòng)位置進(jìn)行情況判斷:

1.如果人前面是空地。

2.如果人前面是目的地。

3.如果人前面是箱子。有以下兩種情況:

如果人前面是箱子,而箱子前面是空地。

如果人的前面是箱子,而箱子前面是目的地。

4.如果人前面是已經(jīng)進(jìn)入某目的地的箱子。有以下兩種情況:

如果人前面是已經(jīng)進(jìn)入某目的地的箱子,而箱子前面是空地。

如果人前面是已經(jīng)進(jìn)入某目的地的箱子,而箱子前面是另一目的地。

5.對(duì)箱子原先位置的判斷。

6.對(duì)人原先位置進(jìn)行判斷。

【從百科上參考查閱下載的代碼,并加以整理】

[cpp] view plain copy

  1. //此小游戲使用C語(yǔ)言編寫,編譯環(huán)境VS2008

  2. #include

  3. #include

  4. #include

  5. int i,j;

  6. void draw_map(int map[10][12]); //聲明畫圖函數(shù)

  7. int main()

  8. {

  9. char input;

  10. int count=0; //定義記分變量

  11. /*下面定義一個(gè)二維數(shù)組,其中的元素是不同圖像的ID號(hào),在后面的函數(shù)中將講解不同數(shù)字分別代表的圖像元素*/

  12. int map[10][12] = {

  13. {2,2,2,2,2,1,1,1,1,1,2,2},

  14. {1,1,1,1,2,1,0,0,0,1,1,2},

  15. {1,0,0,1,1,1,0,1,0,0,1,2},

  16. {1,0,4,3,3,3,3,3,1,0,1,1},

  17. {1,0,0,1,1,3,3,3,4,0,0,1},

  18. {1,0,0,0,0,4,1,1,4,1,0,1},

  19. {1,0,4,1,4,0,0,0,4,0,0,1},

  20. {1,1,0,6,0,1,1,1,4,1,0,1},

  21. {2,1,1,1,1,1,2,1,0,0,0,1},

  22. {2,2,2,2,2,2,2,1,1,1,1,1}

  23. };

  24. while (1) //死循環(huán),等待用戶命令

  25. {

  26. system('CLS');

  27. for (i=0;i<>

  28. {

  29. printf('%d',i);

  30. }

  31. printf('\n');

  32. /*for (i=1;i<>

  33. {

  34. printf('%d\n',i);

  35. }*/

  36. printf('\n');

  37. draw_map(map);

  38. printf('當(dāng)前得分:%d\n',count);

  39. //找初始位置

  40. for (i=0;i<>

  41. {

  42. for (j=0;j<>

  43. {

  44. if (map[i][j]==6||map[i][j]==9)

  45. break;

  46. }

  47. if (map[i][j]==6||map[i][j]==9)

  48. break;

  49. }

  50. printf('您的當(dāng)前坐標(biāo)(%d,%d)',i,j);

  51. input = getch(); //用getch()函數(shù)無需回車確認(rèn)地獲取用戶輸入,用于控制行走方向。

  52. switch (input)

  53. {

  54. case'w':

  55. //如果人前面是空地。 //0代表空地 6代表人 //3代表目的地

  56. if(map[i-1][j]==0)

  57. {

  58. map[i-1][j]=6+0; //人往前走一步,ID為人的ID()加上空地的ID()。

  59. if(map[i][j]==9) //如果當(dāng)前人站的位置為目的地,則ID為(即人的ID()加上目的地ID())。

  60. map[i][j]=3; //將人往前走一步后原地的ID修改為空地ID()。

  61. else

  62. map[i][j]=0; //否則原地ID修改為空地ID 。

  63. }

  64. //如果人前面是目的地。

  65. elseif((map[i-1][j]==3)||(map[i-1][j]==9))

  66. {

  67. map[i-1][j]=6+3; //人往前走一步,ID為人ID+目的地ID=9。

  68. if(map[i][j]==9) //如果原地也是目的地(ID為)。

  69. map[i][j]=3; //人走后把原地ID修改回目的地ID。

  70. else

  71. map[i][j]=0; //否則原地ID修改為為空地ID

  72. }

  73. //如果人前面是箱子。//4代表箱子 //7箱子進(jìn)入目的地

  74. elseif(map[i-1][j]==4)

  75. {

  76. //如果人前面是箱子,而箱子前面是空地。

  77. if (map[i-2][j]==0)

  78. {

  79. map[i-2][j]=4; //人推箱子往前走一步,把空地ID修改為箱子ID()

  80. //下面是對(duì)箱子原地進(jìn)行判斷

  81. if(map[i-1][j]==7) //如果箱子原地為目的地。

  82. map[i-1][j]=9; //人站在箱子的原地(目的地)時(shí)該地ID應(yīng)該為人的ID+目的地ID=9。

  83. else

  84. map[i-1][j]=6; //否則,人站在了原來的空地上,ID應(yīng)該為+0=6。

  85. //下面是對(duì)人原地進(jìn)行判斷

  86. if(map[i][j]==9) //如果之前是目的地。

  87. map[i][j]=3; //人走了之后修改回目的地ID。

  88. else

  89. map[i][j]=0; //否則就是空地。

  90. }

  91. //如果人的前面是箱子,而箱子前面是目的地。

  92. elseif (map[i-2][j]==3)

  93. {

  94. map[i-2][j]=7; //ID為(目的地ID()+箱子ID()=7),表示已經(jīng)把箱子推入了目的地。

  95. count++;

  96. //下面是對(duì)箱子原先位置的判斷,同上。

  97. if(map[i-1][j]==7)

  98. map[i-1][j]=9;

  99. else

  100. map[i-1][j]=6;

  101. //下面是對(duì)人原先位置進(jìn)行判斷,同上。

  102. if(map[i][j]==9)

  103. map[i][j]=3;

  104. else

  105. map[i][j]=0;

  106. }

  107. }

  108. //如果人前面是已經(jīng)進(jìn)入某目的地的箱子(ID=7)。

  109. elseif(map[i-1][j]==7)

  110. {

  111. //如果人前面是已經(jīng)進(jìn)入某目的地的箱子,而箱子前面是空地。

  112. if(map[i-2][j]==0)

  113. {

  114. count--;

  115. map[i-2][j]=4; //把箱子重新推到空地上,ID=箱子ID+空地ID=4。

  116. map[i-1][j]=9; //人自然而然的就站在了原先的目的地上了。

  117. //下面是對(duì)人原先地進(jìn)行判斷,方法同上。

  118. if(map[i][j]==9)

  119. map[i][j]=3;

  120. else

  121. map[i][j]=0;

  122. }

  123. //如果人前面是已經(jīng)進(jìn)入某目的地的箱子,而箱子前面是另一目的地。

  124. if(map[i-2][j]==3)

  125. {

  126. map[i-2][j]=7; //把箱子推入了另一目的地,自然,ID也應(yīng)是。

  127. map[i-1][j]=9; //人站在了目的地上。

  128. //下面是對(duì)人原先站立地進(jìn)行判斷,方法同上。

  129. if(map[i][j]==9)

  130. map[i][j]=3;

  131. else

  132. map[i][j]=0;

  133. }

  134. }

  135. break;

  136. case's':

  137. //如果人前面是空地。

  138. if(map[i+1][j]==0)

  139. {

  140. map[i+1][j]=6+0; //人往前走一步,ID為人的ID()加上空地的ID()。

  141. if(map[i][j]==9) //如果當(dāng)前人站的位置為目的地,則ID為(即人的ID()加上目的地ID())。

  142. map[i][j]=3; //將人往前走一步后原地的ID修改為空地ID()。

  143. else

  144. map[i][j]=0; //否則原地ID修改為空地ID 。

  145. }

  146. //如果人前面是目的地。

  147. elseif(map[i+1][j]==3)

  148. {

  149. map[i+1][j]=6+3; //人往前走一步,ID為人ID+目的地ID=9。

  150. if(map[i][j]==9) //如果原地也是目的地(ID為)。

  151. map[i][j]=3; //人走后把原地ID修改回目的地ID。

  152. else

  153. map[i][j]=0; //否則原地ID修改為為空地ID

  154. }

  155. //如果人前面是箱子。

  156. elseif(map[i+1][j]==4)

  157. {

  158. //如果人前面是箱子,而箱子前面是空地。

  159. if (map[i+2][j]==0)

  160. {

  161. map[i+2][j]=4; //人推箱子往前走一步,把空地ID修改為箱子ID()

  162. //下面是對(duì)箱子原地進(jìn)行判斷

  163. if(map[i+1][j]==7) //如果箱子原地為目的地。

  164. map[i+1][j]=9; //人站在箱子的原地(目的地)時(shí)該地ID應(yīng)該為人的ID+目的地ID=9。

  165. else

  166. map[i+1][j]=6; //否則,人站在了原來的空地上,ID應(yīng)該為+0=6。

  167. //下面是對(duì)人原地進(jìn)行判斷

  168. if(map[i][j]==9) //如果之前是目的地。

  169. map[i][j]=3; //人走了之后修改回目的地ID。

  170. else

  171. map[i][j]=0; //否則就是空地。 (加群: 571545210 學(xué)習(xí)編程,在群里獲得更多的學(xué)習(xí)資料)

  172. }

  173. //如果人的前面是箱子,而箱子前面是目的地。

  174. elseif (map[i+2][j]==3)

  175. {

  176. map[i-2][j]=7; //ID為(目的地ID()+箱子ID()=7),表示已經(jīng)把箱子推入了目的地。

  177. count++;

  178. //下面是對(duì)箱子原先位置的判斷,同上。

  179. if(map[i+1][j]==7)

  180. map[i+1][j]=9;

  181. else

  182. map[i+1][j]=6;

  183. //下面是對(duì)人原先位置進(jìn)行判斷,同上。

  184. if(map[i][j]==9)

  185. map[i][j]=3;

  186. else

  187. map[i][j]=0;

  188. }

  189. }

  190. //如果人前面是已經(jīng)進(jìn)入某目的地的箱子(ID=7)。

  191. elseif(map[i+1][j]==7)

  192. {

  193. //如果人前面是已經(jīng)進(jìn)入某目的地的箱子,而箱子前面是空地。

  194. if(map[i+2][j]==0)

  195. {

  196. count--;

  197. map[i+2][j]=4; //把箱子重新推到空地上,ID=箱子ID+空地ID=4。

  198. map[i+1][j]=9; //人自然而然的就站在了原先的目的地上了。

  199. //下面是對(duì)人原先地進(jìn)行判斷,方法同上。

  200. if(map[i][j]==9)

  201. map[i][j]=3;

  202. else

  203. map[i][j]=0;

  204. }

  205. //如果人前面是已經(jīng)進(jìn)入某目的地的箱子,而箱子前面是另一目的地。

  206. if(map[i+2][j]==3)

  207. {

  208. map[i+2][j]=7; //把箱子推入了另一目的地,自然,ID也應(yīng)是。

  209. map[i+1][j]=9; //人站在了目的地上。

  210. //下面是對(duì)人原先站立地進(jìn)行判斷,方法同上。

  211. if(map[i][j]==9)

  212. map[i][j]=3;

  213. else

  214. map[i][j]=0;

  215. }

  216. }

  217. break;

  218. case'a':

  219. //如果人前面是空地。

  220. if(map[i][j-1]==0)

  221. {

  222. map[i][j-1]=6+0; //人往前走一步,ID為人的ID()加上空地的ID()。

  223. if(map[i][j]==9) //如果當(dāng)前人站的位置為目的地,則ID為(即人的ID()加上目的地ID())。

  224. map[i][j]=3; //將人往前走一步后原地的ID修改為空地ID()。

  225. else

  226. map[i][j]=0; //否則原地ID修改為空地ID 。

  227. }

  228. //如果人前面是目的地。

  229. elseif(map[i][j-1]==3)

  230. {

  231. map[i][j-1]=6+3; //人往前走一步,ID為人ID+目的地ID=9。

  232. if(map[i][j]==9) //如果原地也是目的地(ID為)。

  233. map[i][j]=3; //人走后把原地ID修改回目的地ID。

  234. else

  235. map[i][j]=0; //否則原地ID修改為為空地ID

  236. }

  237. //如果人前面是箱子。

  238. elseif(map[i][j-1]==4)

  239. {

  240. //如果人前面是箱子,而箱子前面是空地。

  241. if (map[i][j-2]==0)

  242. {

  243. map[i][j-2]=4; //人推箱子往前走一步,把空地ID修改為箱子ID()

  244. //下面是對(duì)箱子原地進(jìn)行判斷

  245. if(map[i][j-1]==7) //如果箱子原地為目的地。

  246. map[i][j-1]=9; //人站在箱子的原地(目的地)時(shí)該地ID應(yīng)該為人的ID+目的地ID=9。

  247. else

  248. map[i][j-1]=6; //否則,人站在了原來的空地上,ID應(yīng)該為+0=6。

  249. //下面是對(duì)人原地進(jìn)行判斷

  250. if(map[i][j]==9) //如果之前是目的地。

  251. map[i][j]=3; //人走了之后修改回目的地ID。

  252. else

  253. map[i][j]=0; //否則就是空地。

  254. }

  255. //如果人的前面是箱子,而箱子前面是目的地。

  256. elseif (map[i][j-2]==3)

  257. {

  258. count++;

  259. map[i][j-2]=7; //ID為(目的地ID()+箱子ID()=7),表示已經(jīng)把箱子推入了目的地。

  260. //下面是對(duì)箱子原先位置的判斷,同上。

  261. if(map[i][j-1]==7)

  262. map[i][j-1]=9;

  263. else

  264. map[i][j-1]=6;

  265. //下面是對(duì)人原先位置進(jìn)行判斷,同上。

  266. if(map[i][j]==9)

  267. map[i][j]=3;

  268. else

  269. map[i][j]=0;

  270. }

  271. }

  272. //如果人前面是已經(jīng)進(jìn)入某目的地的箱子(ID=7)。

  273. elseif(map[i][j-1]==7)

  274. {

  275. //如果人前面是已經(jīng)進(jìn)入某目的地的箱子,而箱子前面是空地。

  276. if(map[i][j-2]==0)

  277. {

  278. count--;

  279. map[i][j-2]=4; //把箱子重新推到空地上,ID=箱子ID+空地ID=4。

  280. map[i][j-1]=9; //人自然而然的就站在了原先的目的地上了。

  281. //下面是對(duì)人原先地進(jìn)行判斷,方法同上。

  282. if(map[i][j]==9)

  283. map[i][j]=3;

  284. else

  285. map[i][j]=0;

  286. }

  287. //如果人前面是已經(jīng)進(jìn)入某目的地的箱子,而箱子前面是另一目的地。

  288. if(map[i][j-2]==3)

  289. {

  290. map[i][j-2]=7; //把箱子推入了另一目的地,自然,ID也應(yīng)是。

  291. map[i][j-1]=9; //人站在了目的地上。

  292. //下面是對(duì)人原先站立地進(jìn)行判斷,方法同上。

  293. if(map[i][j]==9)

  294. map[i][j]=3;

  295. else

  296. map[i][j]=0;

  297. }

  298. }

  299. break;

  300. case'd':

  301. //如果人前面是空地。

  302. if(map[i][j+1]==0)

  303. {

  304. map[i][j+1]=6+0; //人往前走一步,ID為人的ID()加上空地的ID()。

  305. if(map[i][j]==9) //如果當(dāng)前人站的位置為目的地,則ID為(即人的ID()加上目的地ID())。

  306. map[i][j]=3; //將人往前走一步后原地的ID修改為空地ID()。

  307. else

  308. map[i][j]=0; //否則原地ID修改為空地ID 。

  309. }

  310. //如果人前面是目的地。

  311. elseif(map[i][j+1]==3)

  312. {

  313. map[i][j+1]=6+3; //人往前走一步,ID為人ID+目的地ID=9。

  314. if(map[i][j]==9) //如果原地也是目的地(ID為)。

  315. map[i][j]=3; //人走后把原地ID修改回目的地ID。

  316. else

  317. map[i][j]=0; //否則原地ID修改為為空地ID

  318. }

  319. //如果人前面是箱子。

  320. elseif(map[i][j+1]==4)

  321. {

  322. //如果人前面是箱子,而箱子前面是空地。

  323. if (map[i][j+2]==0)

  324. {

  325. map[i][j+2]=4; //人推箱子往前走一步,把空地ID修改為箱子ID()

  326. //下面是對(duì)箱子原地進(jìn)行判斷

  327. if(map[i][j+1]==7) //如果箱子原地為目的地。

  328. map[i][j+1]=9; //人站在箱子的原地(目的地)時(shí)該地ID應(yīng)該為人的ID+目的地ID=9。

  329. else

  330. map[i][j+1]=6; //否則,人站在了原來的空地上,ID應(yīng)該為+0=6。

  331. //下面是對(duì)人原地進(jìn)行判斷

  332. if(map[i][j]==9) //如果之前是目的地。

  333. map[i][j]=3; //人走了之后修改回目的地ID。

  334. else

  335. map[i][j]=0; //否則就是空地。

  336. }

  337. //如果人的前面是箱子,而箱子前面是目的地。

  338. elseif (map[i][j+2]==3)

  339. {

  340. count++;

  341. map[i][j+2]=7; //ID為(目的地ID()+箱子ID()=7),表示已經(jīng)把箱子推入了目的地。

  342. //下面是對(duì)箱子原先位置的判斷,同上。

  343. if(map[i][j+1]==7)

  344. map[i][j+1]=9;

  345. else

  346. map[i][j+1]=6;

  347. //下面是對(duì)人原先位置進(jìn)行判斷,同上。

  348. if(map[i][j]==9)

  349. map[i][j]=3;

  350. else

  351. map[i][j]=0;

  352. }

  353. }

  354. //如果人前面是已經(jīng)進(jìn)入某目的地的箱子(ID=7)。

  355. elseif(map[i][j+1]==7)

  356. {

  357. //如果人前面是已經(jīng)進(jìn)入某目的地的箱子,而箱子前面是空地。

  358. if(map[i][j+2]==0)

  359. {

  360. count--;

  361. map[i][j+2]=4; //把箱子重新推到空地上,ID=箱子ID+空地ID=4。

  362. map[i][j+1]=9; //人自然而然的就站在了原先的目的地上了。

  363. //下面是對(duì)人原先地進(jìn)行判斷,方法同上。

  364. if(map[i][j]==9)

  365. map[i][j]=3;

  366. else

  367. map[i][j]=0;

  368. }

  369. //如果人前面是已經(jīng)進(jìn)入某目的地的箱子,而箱子前面是另一目的地。

  370. if(map[i][j+2]==3)

  371. {

  372. map[i][j+2]=7; //把箱子推入了另一目的地,自然,ID也應(yīng)是。

  373. map[i][j+1]=9; //人站在了目的地上。

  374. //下面是對(duì)人原先站立地進(jìn)行判斷,方法同上。

  375. if(map[i][j]==9)

  376. map[i][j]=3;

  377. else

  378. map[i][j]=0;

  379. }

  380. }

  381. break;

  382. }

  383. if(count==8) //如果分?jǐn)?shù)達(dá)到分

  384. {

  385. system('CLS'); //清屏

  386. draw_map(map);

  387. break; //退出死循環(huán)

  388. }

  389. }

  390. printf('\n恭喜你,過關(guān)了??!\n'); //過關(guān)提示

  391. return 0;

  392. }

  393. void draw_map(int map[10][12])

  394. {

  395. for(i=0;i<>

  396. {

  397. for(j=0;j<>

  398. {

  399. switch(map[i][j])

  400. {

  401. case 0:

  402. printf(' '); //數(shù)字代表道路

  403. break;

  404. case 1:

  405. printf('#'); //數(shù)字代表墻壁

  406. break;

  407. case 2:

  408. printf(' '); //數(shù)字是游戲邊框的空白部分

  409. break;

  410. case 3:

  411. printf('!'); //數(shù)字代表目的地

  412. break;

  413. case 4:

  414. printf('*'); //數(shù)字代表箱子

  415. break;

  416. case 7:

  417. printf('$'); //數(shù)字代表箱子進(jìn)入目的地

  418. break;

  419. case 6:

  420. printf('@'); //數(shù)字代表人

  421. break;

  422. case 9:

  423. printf('@'); //數(shù)字代表人進(jìn)入目的地

  424. break;

  425. }

  426. }

  427. printf('\n'); //分行輸出

  428. }

  429. }

  430. (加群: 571545210 學(xué)習(xí)編程,在群里獲得更多的學(xué)習(xí)資料)

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多