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

本文实例为大家分享了C语言实现推箱子游戏的具体代码,供大家参考,具体内容如下

  1. #include<stdio.h>
  2. #include<string.h>
  3. #include<stdlib.h>
  4. #define N 1000
  5. /*
  6. r目的地
  7. o箱子
  8. i人
  9. x墙
  10. 路(空格)
  11. w上
  12. a左
  13. d右
  14. s下
  15. */
  16. void menu();
  17. int level1();
  18. int level2();
  19. void swap(char*,char*);
  20. int opera(char *p,int *ren,int xzs);
  21. void dituprint();
  22. void menu()
  23. {
  24. printf("推箱子\n");
  25. printf("1.新游戏 2.选关\n");
  26. printf("0.退出\n");
  27. }
  28. void xuanguan()
  29. {
  30. int choice_level;
  31. while(1)
  32. {
  33. printf("请选择关卡:\n");
  34. scanf("%d",&choice_level);
  35. switch(choice_level)
  36. {
  37. case 1:
  38. level1();
  39. break;
  40. case 2:
  41. level2();
  42. break;
  43. default:
  44. printf("输入错误,请重新选择关卡!");
  45. }
  46. }
  47. }
  48. void swap(char *a,char *b)
  49. {
  50. char ch;
  51. ch=*a;
  52. *a=*b;
  53. *b=ch;
  54. }
  55. void dituprint(char *p)
  56. {
  57. for(int i=0;i<9;i++)
  58. {
  59. for(int j=0;j<9;j++)
  60. printf("%3c",p[i*9+j]);
  61. printf("\n");
  62. }
  63. }
  64. int opera(char *p,int *ren,int xzs)
  65. {
  66. dituprint(p);
  67. while(1)
  68. {
  69. for(int i=1,panduan=0;i<=xzs;i++)
  70. {
  71. if(p[ren[i]]=='o')
  72. {
  73. panduan+=1;
  74. printf("panduan=%d\n",panduan);
  75. }
  76. if(panduan==xzs)
  77. {
  78. printf("恭喜你,过关啦!");
  79. getchar();
  80. return 0;
  81. }
  82. }
  83. char ch;
  84. printf("你的按键是:");
  85. scanf("%c",&ch);
  86. switch(ch)
  87. {
  88. case 'w':
  89. {
  90. if(p[ren[0]]=='r')
  91. {
  92. if(p[ren[0]-9]=='r')
  93. {
  94. ren[0]-=9;
  95. p[ren[0]='i'];
  96. p[ren[0]+9]='r';
  97. break;
  98. }
  99. if(p[ren[0]-9]=='x')
  100. {
  101. printf("人碰到墙了 换按其他键1哇>>>>>");
  102. break;
  103. }
  104. if(p[ren[0]-9]==' ')
  105. {
  106. ren[0]-=9;
  107. p[ren[0]='i'];
  108. p[ren[0]-9]='r';
  109. break;
  110. }
  111. if(p[ren[0]-9]=='o')
  112. {
  113. if(p[ren[0]-18]=='x'||'o')
  114. printf("箱子碰到了 换按其他键1哇>>>>>");break;
  115. if(p[ren[0]-18]=='r')
  116. {
  117. p[ren[0]-18]='o';
  118. p[ren[0]-9]='i';
  119. p[ren[0]]='r';
  120. ren[0]-=9;
  121. break;
  122. }
  123. if(p[ren[0]-18]=='o')
  124. printf("推不动诶 换按其他键1哇>>>>>");break;
  125. if(p[ren[0]-18]==' ')
  126. {
  127. swap(&p[ren[0]-9],&p[ren[0]-18]);
  128. swap(&p[ren[0]],&p[ren[0]-9]);
  129. p[ren[0]]='r';
  130. ren[0]-=9;
  131. break;
  132. }
  133. }
  134. }
  135. else
  136. {
  137. if(p[ren[0]-9]=='x')
  138. {
  139. printf("人碰到墙了 换按其他键2>>>>>");
  140. break;
  141. }
  142. if(p[ren[0]-9]==' ')
  143. {
  144. swap(&p[ren[0]],&p[ren[0]-9]);
  145. ren[0]-=9;
  146. break;
  147. }
  148. if(p[ren[0]-9]=='o')
  149. {
  150. if(p[ren[0]-18]=='o'||p[ren[0]-18]=='x')
  151. {
  152. printf("走不动了 换按其他键哇。。。。\n");
  153. break;
  154. }
  155. if(p[ren[0]-18]=='r')
  156. {
  157. p[ren[0]-18]='o';
  158. p[ren[0]-9]='i';
  159. p[ren[0]]=' ';
  160. ren[0]-=9;
  161. break;
  162. }
  163. }
  164. }
  165. }
  166. break;
  167. case 'a':
  168. {
  169. if(p[ren[0]]=='r')
  170. {
  171. if(p[ren[0]-1]=='r')
  172. {
  173. ren[0]-=1;
  174. p[ren[0]]='i';
  175. p[ren[0]+1]='r';
  176. break;
  177. }
  178. if(p[ren[0]-1]=='x')
  179. {
  180. printf("人碰到墙了 换按其他键1哇>>>>>");
  181. break;
  182. }
  183. if(p[ren[0]-1]==' ')
  184. {
  185. ren[0]-=1;
  186. p[ren[0]]='i';
  187. p[ren[0]+9]='r';
  188. break;
  189. }
  190. if(p[ren[0]-1]=='o')
  191. {
  192. if(p[ren[0]-2]=='o'||p[ren[0]-2]=='x')
  193. {
  194. printf("走不动了 换按其他键娃娃。。。。。\n");
  195. break;
  196. }
  197. if(p[ren[0]-2]=='r')
  198. {
  199. p[ren[0]-2]='o';
  200. p[ren[0]-1]='i';
  201. p[ren[0]]=' ';
  202. ren[0]-=1;
  203. break;
  204. }
  205. if(p[ren[0]-2]==' ')
  206. {
  207. p[ren[0]-2]='o';
  208. p[ren[0]-1]='i';
  209. p[ren[0]]=' ';
  210. ren[0]-=1;
  211. break;
  212. }
  213. }
  214. }
  215. }
  216. break;
  217. case 's':
  218. {
  219. if(p[ren[0]]=='r')
  220. {
  221. if(p[ren[0]+9]=='r')
  222. {
  223. ren[0]+=9;
  224. p[ren[0]]='i';
  225. p[ren[0]-9]='r';
  226. break;
  227. }
  228. if(p[ren[0]+9]=='x')
  229. {
  230. printf("人碰到墙了 换按其他键1哇>>>>>");
  231. break;
  232. }
  233. if(p[ren[0]+9]==' ')
  234. {
  235. ren[0]+=9;
  236. p[ren[0]]='i';
  237. p[ren[0]+9]='r';
  238. break;
  239. }
  240. if(p[ren[0]+9]=='o')
  241. {
  242. if(p[ren[0]+18]=='x'||'o')
  243. {
  244. printf("箱子碰到墙了 换按其他键1哇>>>>>");break;
  245. if(p[ren[0]+18]=='r')
  246. {
  247. p[ren[0]+18]='o';
  248. p[ren[0]+9]='i';
  249. p[ren[0]]='r';
  250. ren[0]+=9;
  251. break;
  252. }
  253. if(p[ren[0]+18]=='o')
  254. printf("推不动哎 换按其他键1哇>>>>>");break;
  255. if(p[ren[0]+18]==' ')
  256. {
  257. swap(&p[ren[0]+9],&p[ren[0]+18]);
  258. swap(&p[ren[0]],&p[ren[0]-9]);
  259. p[ren[0]]='r';
  260. ren[0]+=9;
  261. break;
  262. }
  263. }
  264. }
  265. else
  266. {
  267. if(p[ren[0]+9]=='x')
  268. {
  269. printf("人碰到墙了,换按其他键哇2>>>>>");
  270. break;
  271. }
  272. if(p[ren[0]+9]==' ')
  273. {
  274. swap(&p[ren[0]],&p[ren[0]+9]);
  275. ren[0]+=9;
  276. break;
  277. }
  278. if(p[ren[0]+9]=='o')
  279. {
  280. if(p[ren[0]+18]=='o'||p[ren[0]+18]=='x')
  281. {
  282. printf("走不动了,换按其他键哇。。。。。\n");
  283. break;
  284. }
  285. if(p[ren[0]+18]=='r')
  286. {
  287. p[ren[0]+18]='o';
  288. p[ren[0]+9]='i';
  289. p[ren[0]]=' ';
  290. ren[0]+=9;
  291. break;
  292. }
  293. if(p[ren[0]+18]==' ')
  294. {
  295. p[ren[0]+18]='o';
  296. p[ren[0]+9]='i';
  297. p[ren[0]]=' ';
  298. ren[0]+=9;
  299. break;
  300. }
  301. }
  302. }
  303. }
  304. break;
  305. case'd':
  306. {
  307. if(p[ren[0]]=='r')
  308. {
  309. if(p[ren[0]+1]=='r')
  310. {
  311. ren[0]+=1;
  312. p[ren[0]]='i';
  313. p[ren[0]-1]='r';
  314. break;
  315. }
  316. if(p[ren[0]+1]=='x')
  317. {
  318. printf("人碰到墙了 换按其他键1哇>>>>>");
  319. break;
  320. }
  321. if(p[ren[0]+1]==' ')
  322. {
  323. ren[0]+=1;
  324. p[ren[0]]='i';
  325. p[ren[0]-1]='r';
  326. break;
  327. }
  328. if(p[ren[0]+1]=='o')
  329. {
  330. if(p[ren[0]+2]=='x'||'o')
  331. printf("箱子碰到墙了 换按其他键1哇>>>>>>");
  332. break;
  333. if(p[ren[0]+2]=='r')
  334. {
  335. p[ren[0]+2]='o';
  336. p[ren[0]+1]='i';
  337. p[ren[0]]='r';
  338. p[0]+=1;
  339. break;
  340. }
  341. if(p[ren[0]+2]=='o')
  342. printf("推不动诶 换按其他键1哇>>>>>");break;
  343. if(p[ren[0]+2]==' ')
  344. {
  345. swap(&p[ren[0]+1],&p[ren[0]+2]);
  346. swap(&p[ren[0]],&p[ren[0]-1]);
  347. p[ren[0]]='r';
  348. ren[0]+=1;
  349. break;
  350. }
  351. }
  352. }
  353. else
  354. {
  355. if(p[ren[0]+1]=='x')
  356. {
  357. printf("人碰到墙了,换按其他键哇2>>>>>");
  358. break;
  359. }
  360. if(p[ren[0]+1]==' ')
  361. {
  362. swap(&p[ren[0]],&p[ren[0]+1]);
  363. ren[0]+=1;
  364. break;
  365. }
  366. if(p[ren[0]+1]=='o')
  367. {
  368. if(p[ren[0]+2]=='o'||p[ren[0]+2]=='x')
  369. {
  370. printf("走不动了!换按其他键哇。。。。。");
  371. break;
  372. }
  373. if(p[ren[0]+2]=='r')
  374. {
  375. p[ren[0]+2]='o';
  376. p[ren[0]+1]='i';
  377. p[ren[0]]=' ';
  378. ren[0]+=1;
  379. break;
  380. }
  381. if(p[ren[0]+2]==' ')
  382. {
  383. p[ren[0]+2]='o';
  384. p[ren[0]+1]='i';
  385. p[ren[0]]=' ';
  386. ren[0]+=1;
  387. break;
  388. }
  389. }
  390. }
  391. }
  392. break;
  393. default:printf("操作错误!请确认后再重新操作。。。。。");
  394. }
  395. dituprint(p);
  396. }
  397. /*int panduan=0;
  398. for(int i=1;i<xzs;i++)
  399. {
  400. if(p[ren[0]]=='o')panduan++;
  401. }
  402. if(panduan=(xzs-1)){getchar();break;}*/
  403. }
  404. return 0;
  405. }
  406. int level1()
  407. {
  408. printf("第一关\n");
  409. char ditu1[9*9]={
  410. '0','1','2','3','4','5','6','7','8',
  411. '1',' ',' ','x','x','x',' ',' ',' ',
  412. '2',' ',' ','x','r','x',' ',' ',' ',
  413. '3',' ',' ','x',' ','x','x','x','x',
  414. '4','x','x','x','o','x','o','r','x',
  415. '5','x','r',' ','o','i','x','x','x',
  416. '6','x','x','x','x','o','x',' ',' ',
  417. '7',' ',' ',' ','x','r','x',' ',' ',
  418. '8',' ',' ',' ','x','x','x',' ',' ',
  419. };
  420. int ren1[5]={50,22,47,43,68};
  421. opera(ditu1,ren1,4);
  422. level2();
  423. return 0;
  424. }
  425. int level2()
  426. {
  427. printf("欢迎来到第二关\n");
  428. char ditu1[9*9]={
  429. '0','1','2','3','4','5','6','7','8',
  430. '1',' ',' ','x','x','x',' ',' ',' ',
  431. '2',' ',' ','x','r','x',' ',' ',' ',
  432. '3',' ',' ','x',' ','x','x','x','x',
  433. '4','x','x','x','o','x','o','r','x',
  434. '5','x','r',' ','o','i','x','x','x',
  435. '6','x','x','x','x','o','x',' ',' ',
  436. '7',' ',' ',' ','x','r','x',' ',' ',
  437. '8',' ',' ',' ','x','x','x',' ',' ',
  438. };
  439. int ren1[5]={50,22,47,43,68};
  440. opera(ditu1,ren1,4);
  441. level1();
  442. return 0;
  443. }
  444. int main()
  445. {
  446. int choice;
  447. menu();
  448. while(1)
  449. {
  450. scanf("%d",&choice);
  451. switch(choice)
  452. {
  453. case 0:
  454. exit(0);
  455. case 1:
  456. {
  457. level1();
  458. break;
  459. }
  460. case 2:
  461. {
  462. xuanguan();
  463. break;
  464. }
  465. default:
  466. {
  467. printf("操作错误!请确认正确后操作。。。。。\n");
  468. }
  469. }
  470. }
  471. getchar();
  472. return 0;
  473. }

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持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号