久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 1942|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

貪吃蛇小游戲C語(yǔ)言程序

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:1013938 發(fā)表于 2022-5-17 14:22 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
  1. #include<stdio.h>
  2. #include<time.h>
  3. #include<windows.h>
  4. #include<stdlib.h>

  5. #define U 1
  6. #define D 2
  7. #define L 3
  8. #define R 4 //蛇的狀態(tài),U:上 ;D:下;L:左 R:右

  9. typedef struct SNAKE //蛇身的一個(gè)節(jié)點(diǎn)
  10. {
  11. int x;
  12. int y;
  13. struct SNAKE *next;
  14. }snake;

  15. //全局變量//
  16. int score=0,add=10;//總得分與每次吃食物得分。
  17. int status,sleeptime=200;//每次運(yùn)行的時(shí)間間隔
  18. snake *head, *food;//蛇頭指針,食物指針
  19. snake *q;//遍歷蛇的時(shí)候用到的指針
  20. int endgamestatus=0; //游戲結(jié)束的情況,1:撞到墻;2:咬到自己;3:主動(dòng)退出游戲。

  21. //聲明全部函數(shù)//
  22. void Pos();
  23. void creatMap();
  24. void initsnake();
  25. int biteself();
  26. void createfood();
  27. void cantcrosswall();
  28. void snakemove();
  29. void pause();
  30. void gamecircle();
  31. void welcometogame();
  32. void endgame();
  33. void gamestart();

  34. void Pos(int x,int y)//設(shè)置光標(biāo)位置
  35. {
  36. COORD pos;
  37. HANDLE hOutput;
  38. pos.X=x;
  39. pos.Y=y;
  40. hOutput=GetStdHandle(STD_OUTPUT_HANDLE);
  41. SetConsoleCursorPosition(hOutput,pos);
  42. }

  43. void creatMap()//創(chuàng)建地圖
  44. {
  45. int i;
  46. for(i=0;i<58;i+=2)//打印上下邊框
  47. {
  48. Pos(i,0);
  49. printf("■");
  50. Pos(i,26);
  51. printf("■");
  52. }
  53. for(i=1;i<26;i++)//打印左右邊框
  54. {
  55. Pos(0,i);
  56. printf("■");
  57. Pos(56,i);
  58. printf("■");
  59. }
  60. }

  61. void initsnake()//初始化蛇身
  62. {
  63. snake *tail;
  64. int i;
  65. tail=(snake*)malloc(sizeof(snake));//從蛇尾開始,頭插法,以x,y設(shè)定開始的位置//
  66. tail->x=24;
  67. tail->y=5;
  68. tail->next=NULL;
  69. for(i=1;i<=4;i++)
  70. {
  71. head=(snake*)malloc(sizeof(snake));
  72. head->next=tail;
  73. head->x=24+2*i;
  74. head->y=5;
  75. tail=head;
  76. }
  77. while(tail!=NULL)//從頭到為,輸出蛇身
  78. {
  79. Pos(tail->x,tail->y);
  80. printf("■");
  81. tail=tail->next;
  82. }
  83. }

  84. int biteself()//判斷是否咬到了自己
  85. {
  86. snake *self;
  87. self=head->next;
  88. while(self!=NULL)
  89. {
  90. if(self->x==head->x && self->y==head->y)
  91. {
  92. return 1;
  93. }
  94. self=self->next;
  95. }
  96. return 0;
  97. }

  98. void createfood()//隨機(jī)出現(xiàn)食物
  99. {
  100. snake *food_1;
  101. srand((unsigned)time(NULL));
  102. food_1=(snake*)malloc(sizeof(snake));
  103. while((food_1->x%2)!=0) //保證其為偶數(shù),使得食物能與蛇頭對(duì)其
  104. {
  105. food_1->x=rand()%52+2;
  106. }
  107. food_1->y=rand()%24+1;
  108. q=head;
  109. while(q->next==NULL)
  110. {
  111. if(q->x==food_1->x && q->y==food_1->y) //判斷蛇身是否與食物重合
  112. {
  113. free(food_1);
  114. createfood();
  115. }
  116. q=q->next;
  117. }
  118. Pos(food_1->x,food_1->y);
  119. food=food_1;
  120. printf("■");
  121. }

  122. void cantcrosswall()//不能穿墻
  123. {
  124. if(head->x==0 || head->x==56 ||head->y==0 || head->y==26)
  125. {
  126. endgamestatus=1;
  127. endgame();
  128. }
  129. }

  130. void snakemove()//蛇前進(jìn),上U,下D,左L,右R
  131. {
  132. snake * nexthead;
  133. cantcrosswall();

  134. nexthead=(snake*)malloc(sizeof(snake));
  135. if(status==U)
  136. {
  137. nexthead->x=head->x;
  138. nexthead->y=head->y-1;
  139. if(nexthead->x==food->x && nexthead->y==food->y)//如果下一個(gè)有食物//
  140. {
  141. nexthead->next=head;
  142. head=nexthead;
  143. q=head;
  144. while(q!=NULL)
  145. {
  146. Pos(q->x,q->y);
  147. printf("■");
  148. q=q->next;
  149. }
  150. score=score+add;
  151. createfood();
  152. }
  153. else //如果沒有食物//
  154. {
  155. nexthead->next=head;
  156. head=nexthead;
  157. q=head;
  158. while(q->next->next!=NULL)
  159. {
  160. Pos(q->x,q->y);
  161. printf("■");
  162. q=q->next;
  163. }
  164. Pos(q->next->x,q->next->y);
  165. printf(" ");
  166. free(q->next);
  167. q->next=NULL;
  168. }
  169. }
  170. if(status==D)
  171. {
  172. nexthead->x=head->x;
  173. nexthead->y=head->y+1;
  174. if(nexthead->x==food->x && nexthead->y==food->y) //有食物
  175. {
  176. nexthead->next=head;
  177. head=nexthead;
  178. q=head;
  179. while(q!=NULL)
  180. {
  181. Pos(q->x,q->y);
  182. printf("■");
  183. q=q->next;
  184. }
  185. score=score+add;
  186. createfood();
  187. }
  188. else //沒有食物
  189. {
  190. nexthead->next=head;
  191. head=nexthead;
  192. q=head;
  193. while(q->next->next!=NULL)
  194. {
  195. Pos(q->x,q->y);
  196. printf("■");
  197. q=q->next;
  198. }
  199. Pos(q->next->x,q->next->y);
  200. printf(" ");
  201. free(q->next);
  202. q->next=NULL;
  203. }
  204. }
  205. if(status==L)
  206. {
  207. nexthead->x=head->x-2;
  208. nexthead->y=head->y;
  209. if(nexthead->x==food->x && nexthead->y==food->y)//有食物
  210. {
  211. nexthead->next=head;
  212. head=nexthead;
  213. q=head;
  214. while(q!=NULL)
  215. {
  216. Pos(q->x,q->y);
  217. printf("■");
  218. q=q->next;
  219. }
  220. score=score+add;
  221. createfood();
  222. }
  223. else //沒有食物
  224. {
  225. nexthead->next=head;
  226. head=nexthead;
  227. q=head;
  228. while(q->next->next!=NULL)
  229. {
  230. Pos(q->x,q->y);
  231. printf("■");
  232. q=q->next;
  233. }
  234. Pos(q->next->x,q->next->y);
  235. printf(" ");
  236. free(q->next);
  237. q->next=NULL;
  238. }
  239. }
  240. if(status==R)
  241. {
  242. nexthead->x=head->x+2;
  243. nexthead->y=head->y;
  244. if(nexthead->x==food->x && nexthead->y==food->y)//有食物
  245. {
  246. nexthead->next=head;
  247. head=nexthead;
  248. q=head;
  249. while(q!=NULL)
  250. {
  251. Pos(q->x,q->y);
  252. printf("■");
  253. q=q->next;
  254. }
  255. score=score+add;
  256. createfood();
  257. }
  258. else //沒有食物
  259. {
  260. nexthead->next=head;
  261. head=nexthead;
  262. q=head;
  263. while(q->next->next!=NULL)
  264. {
  265. Pos(q->x,q->y);
  266. printf("■");
  267. q=q->next;
  268. }
  269. Pos(q->next->x,q->next->y);
  270. printf(" ");
  271. free(q->next);
  272. q->next=NULL;
  273. }
  274. }
  275. if(biteself()==1) //判斷是否會(huì)咬到自己
  276. {
  277. endgamestatus=2;
  278. endgame();
  279. }
  280. }

  281. void pause()//暫停
  282. {
  283. while(1)
  284. {
  285. Sleep(300);
  286. if(GetAsyncKeyState(VK_SPACE))
  287. {
  288. break;
  289. }

  290. }
  291. }

  292. void gamecircle()//控制游戲
  293. {

  294. Pos(64,15);
  295. printf("不能穿墻,不能咬到自己\n");
  296. Pos(64,16);
  297. printf("用↑.↓.←.→分別控制蛇的移動(dòng).");
  298. Pos(64,17);
  299. printf("F1 為加速,F(xiàn)2 為減速\n");
  300. Pos(64,18);
  301. printf("ESC :退出游戲.space:暫停游戲.");
  302. Pos(64,20);
  303. printf("張文斌修改完成C語(yǔ)言程序貪吃蛇");
  304. status=R;
  305. while(1)
  306. {
  307. Pos(64,10);
  308. printf("得分:%d ",score);
  309. Pos(64,11);
  310. printf("每個(gè)食物得分:%d分",add);j
  311. if(GetAsyncKeyState(VK_UP) && status!=D)
  312. {
  313. status=U;
  314. }
  315. else if(GetAsyncKeyState(VK_DOWN) && status!=U)
  316. {
  317. status=D;
  318. }
  319. else if(GetAsyncKeyState(VK_LEFT)&& status!=R)
  320. {
  321. status=L;
  322. }
  323. else if(GetAsyncKeyState(VK_RIGHT)&& status!=L)
  324. {
  325. status=R;
  326. }
  327. else if(GetAsyncKeyState(VK_SPACE))
  328. {
  329. pause();
  330. }
  331. else if(GetAsyncKeyState(VK_ESCAPE))
  332. {
  333. endgamestatus=3;
  334. break;
  335. }
  336. else if(GetAsyncKeyState(VK_F1))
  337. {
  338. if(sleeptime>=50)
  339. {
  340. sleeptime=sleeptime-30;
  341. add=add+2;
  342. if(sleeptime==320)
  343. {
  344. add=2;//防止減到1之后再加回來有錯(cuò)
  345. }
  346. }
  347. }
  348. else if(GetAsyncKeyState(VK_F2))
  349. {
  350. if(sleeptime<350)
  351. {
  352. sleeptime=sleeptime+30;
  353. add=add-2;
  354. if(sleeptime==350)
  355. {
  356. add=1; //保證最低分為1
  357. }
  358. }
  359. }
  360. Sleep(sleeptime);
  361. snakemove();
  362. }
  363. }

  364. void welcometogame()//開始界面
  365. {
  366. Pos(40,12);

  367. system("title c語(yǔ)言研究中心");
  368. printf("歡迎來到貪食蛇游戲!");
  369. Pos(40,25);
  370. system("pause");
  371. system("cls");
  372. Pos(25,12);
  373. printf("用↑.↓.←.→分別控制蛇的移動(dòng), F1 為加速,2 為減速\n");
  374. Pos(25,13);
  375. printf("加速將能得到更高的分?jǐn)?shù)。\n");
  376. system("pause");
  377. system("cls");
  378. }

  379. void endgame()//結(jié)束游戲
  380. {

  381. system("cls");
  382. Pos(24,12);
  383. if(endgamestatus==1)
  384. {
  385. printf("對(duì)不起,您撞到墻了。游戲結(jié)束.");
  386. }
  387. else if(endgamestatus==2)
  388. {
  389. printf("對(duì)不起,您咬到自己了。游戲結(jié)束.");
  390. }
  391. else if(endgamestatus==3)
  392. {
  393. printf("您的已經(jīng)結(jié)束了游戲。");
  394. }
  395. Pos(24,13);
  396. printf("您的得分是%d\n",score);
  397. exit(0);
  398. }

  399. void gamestart()//游戲初始化
  400. {
  401. system("mode con cols=100 lines=30");
  402. welcometogame();
  403. creatMap();
  404. initsnake();
  405. createfood();
  406. }

  407. int main()
  408. {
  409. gamestart();
  410. gamecircle();
  411. endgame();
  412. return 0;
  413. }
復(fù)制代碼


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏4 分享淘帖 頂1 踩
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 欧美成人精品激情在线观看 | 亚洲欧美另类在线 | www.色.com| 黄视频免费观看 | 99免费在线| 在线三级电影 | 亚洲免费一区二区 | 欧美婷婷 | 成人免费看电影 | 91黄在线观看 | 国产yw851.c免费观看网站 | 婷婷中文字幕 | 99re在线视频 | 国产美女精品 | 北条麻妃一区二区三区在线观看 | 亚洲精品久久久一区二区三区 | 久热精品在线 | h片在线看 | 四虎成人免费视频 | 久久精品综合网 | 亚洲成人自拍 | 男人的天堂中文字幕 | 亚洲一区二区久久久 | 三级av网址 | 久草网站 | 亚洲在线视频 | 中文字幕精品视频 | 欧美成ee人免费视频 | 国产精久久久 | jizz在线看片| 欧美成人一区二免费视频软件 | 免费视频一区二区 | 欧美日韩国产一区二区三区 | 日韩欧美国产精品 | 欧美一区二区在线观看 | 日韩精品视频在线播放 | 亚洲第一成人影院 | 亚洲精品一区二区三区四区高清 | 影音先锋中文字幕在线观看 | 欧美男人天堂 | 亚洲精品在线视频 |