wwwxxx国产_337p日本欧洲亚洲大胆张筱雨_免费在线看成人av_日本黄色不卡视频_国产精品成熟老女人_99视频一区_亚洲精品97久久中文字幕_免费精品视频在线_亚洲色图欧美视频_欧美一区二三区

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 7347|回復: 2
收起左側

c++小游戲(貪吃蛇)源程序

[復制鏈接]
ID:613800 發表于 2019-9-25 09:57 | 顯示全部樓層 |閱讀模式
設計的小游戲,初學者可以加點自己想加的其他功能。

游戲規則
        貪食蛇游戲要求玩家控制方向鍵(或WSAD鍵)來控制小蛇的前進方向,以使蛇吃掉面板上隨即位置上的食物。每次成功吃掉食物后小蛇體長將增加一點,得分增加。當小蛇撞到邊界或者蛇頭與蛇身相撞時,蛇將掛掉,游戲隨之結束。

游戲結構設計
        游戲應當包含初始歡迎界面,游戲界面,游戲結束界面。

        建立一個CGame類,來管理游戲的進度。該類放在Game.h文件中,在該類中可以分別定義NewGame(),PlayGame(),SetGame()和ExitGame()四個函數來控制游戲的各個單元,為了使整個程序看起來更像個游戲,可以采取更加漂亮的界面來展示游戲各部分。


NewGame()函數設定游戲歡迎界面。可以簡單地輸出了一些方塊字符組成的游戲名SNAKE和一句提示“Press any key to start…”。點擊任意鍵后,游戲程序將轉入SetGame()中繼續執行。可以加上一些動態效果,讓提示”Press any keyto start…”不斷跳動。
SetGame()中包括游戲的設置內容。可以選擇Easy,Normal,Hard三個選項。這三個選項將對應小蛇不同的的移動速度,具體來說將體現在PlayGame()函數中每次循環執行速度。設置完成后,游戲程序將轉入PlayGame()繼續執行。
PlayGame()函數主體將是一個死循環,因為可將游戲考慮成一個無窮的循環,循環中迭代的每一步都依次進行:判斷用戶是否輸入、然后根據用戶輸入調整游戲內容(如果沒有輸入則按默認方式繼續執行游戲)、判斷是否符合規則(不符合則跳出循環,轉入ExitGame()退出游戲)、判斷是否需要加分扣分。執行完以上這些步驟后,將進行下一次迭代。當然進行游戲之前,還要執行必要的初始化工作,來顯示大體框架和提示信息。
EitGame()中將顯示游戲得分,并詢問玩家是否再玩一次。這里拼出了一個骷髏頭的圖案,表示Game Over。


        以上為游戲的主體內容,這四個函數設定了游戲的基本結構,剩余部分將繼續考慮細節問題。然后再展示Game.h的細節內容。

建立游戲對象
        先建立一系列類表示游戲對象,其中應包括對游戲對象的處理方式(函數)。分析游戲,可以知道游戲主體是小蛇和食物。

        所有的游戲對象,包括蛇和食物,都是由控制臺上的一系列點組成的。因此需要很多處理點對象的方法。可建立Point.h來定義CPoint對象,來簡化其他對象的處理。

代碼如下:

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <time.h>
  4. #include <conio.h>
  5. #include <windows.h>
  6. #define W 32
  7. #define H 22
  8. const int SIZE_SK = 30*20;
  9. HANDLE hOut;
  10. COORD pos= {0, 0};
  11. CONSOLE_CURSOR_INFO cur_info = {1, 0};
  12. struct snake {
  13. short x, y; //節點坐標
  14. short md; //節點運動方向
  15. short num; //節點內容
  16. int col; //節點顏色
  17. } snake[30*20];
  18. const short dx[4] = {-1, 1, 0, 0}; //方向
  19. const short dy[4] = {0, 0, -1, 1}; //方向
  20. short gamemap[W][H];
  21. short head, tail, score=0;


  22. void initmap(int tm);
  23. void createFood(void);
  24. int getkeys(void);
  25. int move(int idx);
  26. void pntSnake(int i);
  27. void drawEdge(void);
  28. void gameinfo(char *s, int n);


  29. int main(void)
  30. {
  31. int tm = 150; //刷新間隔150毫秒
  32. hOut = GetStdHandle(STD_OUTPUT_HANDLE);
  33. SetConsoleCursorInfo(hOut, &cur_info); //隱藏光標
  34. system("COLOR 2f");
  35. initmap(tm);
  36. return 0;
  37. }
  38. void initmap(int tm)
  39. {
  40. short x, y, i, j;
  41. int index, tmp, ret_m;

  42. while (1){
  43. head=0;
  44. tail=-1;
  45. score=0;
  46. //初始化蛇節點隨機顏色
  47. srand(time(0));
  48. for (i=0; i<SIZE_SK; i++)
  49. snake[i].col = rand()%8+8 | 0x20;
  50. //初始化地圖數組
  51. for (i=0; i<W; i++)
  52. for (j=0; j<H; j++)
  53. gamemap[i][j] = 0;
  54. system("cls");
  55. //繪制邊界
  56. drawEdge();
  57. //打印蛇頭
  58. srand(time(0));
  59. do {
  60. x = rand()%(W-2) + 1;
  61. y = rand()%(H-2) + 1;
  62. } while (gamemap[x][y] != 0); //只在空白處生成
  63. snake[head].x = x;
  64. snake[head].y = y;
  65. gamemap[x][y] = snake[head].num = 1;
  66. pos.X = x*2;
  67. pos.Y = y;
  68. SetConsoleCursorPosition(hOut, pos);
  69. printf("█");
  70. //打印食物
  71. createFood();
  72. while ((index=getkeys()) == 4)
  73. Sleep(500);
  74. //循環開始
  75. while (1){
  76. ret_m = move(index);
  77. if (ret_m == 1){
  78. pos.X = 0; pos.Y = H;
  79. SetConsoleCursorPosition(hOut, pos);
  80. printf("哎呀,掛了哦 ^_^");
  81. break;
  82. }
  83. else if (ret_m == 2){
  84. pos.X = 0; pos.Y = H;
  85. SetConsoleCursorPosition(hOut, pos);
  86. printf("哎呀,超神了 ^_^");
  87. break;
  88. }
  89. Sleep(tm);
  90. if ((tmp = getkeys()) != 4)
  91. index = tmp;
  92. }
  93. //菜單代碼
  94. puts(" 按w\\s\\a\\d 繼續玩,退出請關閉我");
  95. getch();
  96. }
  97. }
  98. void createFood(void)
  99. {
  100. short x, y;
  101. srand(time(0));
  102. do {
  103. x = rand()%(W-2) + 1;
  104. y = rand()%(H-2) + 1;
  105. } while (gamemap[x][y] != 0);
  106. gamemap[x][y] = 2;
  107. pos.X = x*2; pos.Y = y;
  108. SetConsoleCursorPosition(hOut, pos);
  109. SetConsoleTextAttribute(hOut, 0x2f);
  110. printf("⊙");
  111. }
  112. int getkeys(void) //獲取方向鍵
  113. {
  114. char ch;
  115. while(kbhit()){
  116. ch = getch();
  117. if(ch == 'w')
  118. return 2;
  119. if(ch == 's')
  120. return 3;
  121. if(ch == 'a')
  122. return 0;
  123. if(ch == 'd')
  124. return 1;
  125. while (kbhit());
  126. }
  127. return 4;
  128. }
  129. int move(int idx)
  130. {
  131. int newx, newy, pt_tail, i;

  132. newx = snake[head].x + dx[idx];
  133. newy = snake[head].y + dy[idx];
  134. switch (gamemap[newx][newy]){
  135. case 0:
  136. if ((head = ++head%SIZE_SK) != tail){ //不相等即蛇節點隊列未滿
  137. snake[head].x = newx;
  138. snake[head].y = newy;
  139. snake[head].num = 1;
  140. gamemap[newx][newy] = 1;
  141. tail = ++tail%SIZE_SK;
  142. snake[tail].num = 0; //清除尾部,打印空字符
  143. gamemap[snake[tail].x][snake[tail].y] = 0;
  144. snake[head].md = idx; //存儲移動方向
  145. pt_tail = tail - 1;
  146. }
  147. else
  148. return 2; //回合結束標記2代表蛇填滿空間
  149. break;
  150. case 2:
  151. if ((head = ++head%SIZE_SK) != tail){ //不相等即蛇節點隊列未滿
  152. snake[head].x = newx; //head+1后存儲新坐標為蛇頭
  153. snake[head].y = newy;
  154. snake[head].num = 1;
  155. gamemap[newx][newy] = 1;
  156. snake[head].md = idx; //存儲移動方向
  157. pt_tail = tail = tail%SIZE_SK;
  158. score++;
  159. createFood();
  160. }
  161. break;
  162. case 3:
  163. return 1; //遇到墻壁
  164. case 1:
  165. return 1; //遇到自身
  166. default: ;
  167. }
  168. //打印蛇
  169. if (pt_tail == -1)
  170. pt_tail++;
  171. if (pt_tail < head){ //尾巴在頭部后面(這兩者是數組索引)
  172. for (i=pt_tail; i<=head; i++){
  173. pntSnake(i); //打印
  174. }
  175. }
  176. else{
  177. for (i=pt_tail; i<SIZE_SK; i++)
  178. pntSnake(i);
  179. for (i=0; i<=head; i++)
  180. pntSnake(i);
  181. }
  182. gameinfo(" 分數", score);
  183. return 0;
  184. }
  185. void pntSnake(int i)
  186. {
  187. //轉換x坐標:內部是連續整數,打印時一個字符占位2,所以要2x
  188. pos.X = snake[i].x * 2;
  189. pos.Y = snake[i].y;
  190. SetConsoleCursorPosition(hOut, pos);
  191. if (snake[i].num == 0){
  192. putchar('\0'); //清除蛇尾
  193. putchar('\0');}
  194. else if (snake[i].num == 1){
  195. //下面函數第二個參數低4位控制前景色,高4位控制背景色,共8位
  196. SetConsoleTextAttribute(hOut, snake[i].col);
  197. printf("█");
  198. }
  199. }
  200. void drawEdge(void)
  201. {
  202. int i;
  203. for (i=0; i<W; i++){
  204. pos.X = i*2; pos.Y = 0;
  205. SetConsoleCursorPosition(hOut, pos);
  206. printf("█");
  207. gamemap[i][pos.Y] = 3;
  208. pos.Y = H-1;
  209. SetConsoleCursorPosition(hOut, pos);
  210. printf("█");
  211. gamemap[i][H-1] = 3;
  212. }
  213. for (i=1; i<H-1; i++){
  214. pos.X = 0; pos.Y = i;
  215. SetConsoleCursorPosition(hOut, pos);
  216. printf("█");
  217. gamemap[pos.X][i] = 3;
  218. pos.X = (W-1)*2;
  219. SetConsoleCursorPosition(hOut, pos);
  220. printf("█");
  221. gamemap[W-1][i] = 3;
  222. }
  223. }
  224. void gameinfo(char *s, int n)
  225. {
  226. pos.X = 0; pos.Y = H;
  227. SetConsoleCursorPosition(hOut, pos);
  228. SetConsoleTextAttribute(hOut, 0x2f);
  229. printf(" 貪吃蛇");
  230. printf(" %s: %d", s, n);
  231. }
復制代碼

評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

回復

使用道具 舉報

無效樓層,該帖已經被刪除
ID:833828 發表于 2020-11-8 20:45 | 顯示全部樓層
請問為什么我運行不了呢?(我就直接把代碼復制進去了)
回復

使用道具 舉報

ID:882731 發表于 2021-2-23 10:09 | 顯示全部樓層
helloSCM 發表于 2020-11-8 20:45
請問為什么我運行不了呢?(我就直接把代碼復制進去了)

這是整個程序實現貪食蛇功能還是要設計界面?
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
91久久久久久| 爱啪导航一精品导航站| 欧美亚洲日本在线| 久久精品视频18| 日批免费观看视频| 欧美性受xxxx黒人xyx性爽| 中文字幕国产传媒| 日韩一级片播放| 五月天婷婷激情视频| 欧美日韩在线成人| 亚洲午夜精品一区| 少妇欧美激情一区二区三区| 亚洲熟妇一区二区| 国产中文字幕一区二区| 久久久久久九九九九九| 国产精品国产三级国产专业不| 伊人网在线视频观看| 欧美a在线播放| 性生交大片免费全黄| 久久久久国产精品夜夜夜夜夜| 亚洲一区 视频| 国产字幕在线观看| 91黄色在线视频| 亚洲爱情岛论坛永久| 人妻一区二区三区四区| 在线视频在线视频7m国产| 麻豆国产视频| sesexxxx| 美臀av在线| 日韩黄色影院| 九九色在线视频| 岛国精品在线| 岛国av一区| 精品高清在线| 99爱视频在线| 久久91在线| 一级少妇精品久久久久久久| 欧洲精品在线视频| 欧美一区二区三区四区五区六区| 日本午夜在线亚洲.国产| 久久伊人资源站| 亚洲欧美激情网| 久久精品视频9| 亚洲欧美日韩成人网| 免费人成在线观看网站| 中文久久电影小说| 日本sm残虐另类| 精品久久久一区二区| 久久亚洲精品一区| 日本在线播放不卡| 捆绑凌虐一区二区三区| 国产夫妻自拍av| 含羞草激情视频| 久久99久久久精品欧美| 久久一区视频| 欧美日韩免费网站| 久久久久这里只有精品| 水蜜桃在线免费观看| av片在线免费看| 四虎影视网站| 国产在线观看a视频| 日本久久综合| 久久精品男人的天堂| 精品亚洲国产成av人片传媒| 国产精品国产精品国产专区蜜臀ah | 日本久久黄色| 国产婷婷色一区二区三区 | 亚洲三级av在线| 激情视频一区二区| 欧美 变态 另类 人妖| 内射后入在线观看一区| 一级片免费在线| 亚州精品视频| 久久久三级国产网站| 亚洲第一色中文字幕| 精选一区二区三区四区五区| 国产草草浮力影院| a中文字幕www| 日本无删减在线| 精品电影一区| 黄色91在线观看| 欧美一性一乱一交一视频| 成年人黄色片视频| 一二三四区在线| 人操人视频在线观看| 精品免费在线| 伊人婷婷欧美激情| 欧美在线视频一区二区| www.久久av.com| 视频二区在线观看| 尤物视频在线看| 999在线观看精品免费不卡网站| 欧美色视频日本高清在线观看| 欧美在线视频观看免费网站| 日日干夜夜操s8| 亚洲高清视频在线播放| 日本亚洲精品| 亚洲青色在线| 51精品久久久久久久蜜臀| 91久久大香伊蕉在人线| 无码人妻精品一区二区三应用大全| 性欧美最新另类| 久久青青视频| 国产精品69久久久久水密桃| 亚洲欧美日韩精品久久亚洲区 | 亚洲蜜桃av| 国产一级特黄aaa大片| av大片免费看| 免费日韩一区二区三区| 亚洲欧洲在线观看av| 国产69久久精品成人| 国产九九在线观看| 日韩一区二区三区不卡| 国产乱码在线| 国产福利91精品| 一区二区三区www| 日本阿v视频在线观看| 在线视频欧美亚洲| 在线观看a视频| 新狼窝色av性久久久久久| 91精品国产全国免费观看| 欧美成人第一区| 久久精品视频国产| 亚洲福利二区| 99精品福利视频| 精品国产乱码久久久久久图片| 国产91av视频在线观看| 一级日韩一级欧美| 中文字幕在线观看播放| 狠狠色狠狠色综合系列| 色综合影院在线| 艹b视频在线观看| 久热中文在线| 97精品资源在线观看| 中文字幕一区视频| 国产精品久久久久久久久久久久久 | 欧美高清视频www夜色资源网| 欧美高清性xxxxhd| 少妇一级淫片免费放中国 | 青青操在线视频观看| 午夜电影福利| 亚洲毛片在线播放| 亚洲av无码片一区二区三区| 黄色片网站在线| 人妖欧美一区二区| 亚洲天堂影视av| 无码精品国产一区二区三区免费| 视频一区 中文字幕| 经典三级一区二区| 欧美国产综合一区二区| 国产精品伦子伦免费视频| 免费看裸体网站| 欧美高清xxxxxkkkkk| 亚洲精品成人影院| 欧美成人性福生活免费看| av磁力番号网| 亚洲福利在线观看视频| 欧美日韩国产网站| 国产精品美女久久久久aⅴ国产馆 国产精品美女久久久久av爽李琼 国产精品美女久久久久高潮 | 狼狼综合久久久久综合网| 亚洲一级生活片| 九色在线免费| 狠狠v欧美v日韩v亚洲ⅴ| 欧美激情国产精品| 亚洲色成人网站www永久四虎| 全部a∨一极品视觉盛宴| 欧美一级视频| 久久五月天色综合| 国产熟妇久久777777| 伊人国产在线| 韩国毛片一区二区三区| 51色欧美片视频在线观看| 中文字幕91视频| 欧美日韩国产亚洲沙发| 国产精品夜夜嗨| 国产精品青青在线观看爽香蕉 | 欧美r级电影在线观看| 国产91对白刺激露脸在线观看| 国产精品欧美色图| 伊人久久大香线| 国产一区二区三区欧美| www.男人天堂| 污视频在线看操| 国产成a人亚洲精品| 国产精品视频久久久| 国产成人无码一区二区三区在线| 精品三级久久| 午夜精品123| av日韩在线看| 国产9色视频| 欧美视频四区| 欧美精品18videos性欧美| 日韩精品123区| 欧美寡妇性猛交xxx免费| 中文字幕一区二区三区四区不卡| 日本在线播放一区| 欧美最猛黑人xxxx| 欧美激情成人在线| 欧美成人午夜剧场免费观看| 中文字幕影音先锋| 松下纱荣子在线观看| 欧美日韩性视频| 欧美日韩在线一| 先锋影音av资源站| 美女网站视频久久| 宅男在线观看免费高清网站| 国产日韩欧美不卡在线| 美日韩精品免费| 天天操天天操天天干| 国产一区国产二区国产三区| 亚洲欧美激情另类校园| 亚洲av片不卡无码久久| 婷婷五月在线视频| 亚洲乱码精品一二三四区日韩在线| 国产三级中文字幕| 天堂www在线а√天堂| 久久一日本道色综合久久| 国产精品久久久久久av福利| 91国产免费视频| 亚洲福利天堂| 在线一区二区日韩| 国产盗摄一区二区三区在线| 电影一区电影二区| 日韩美女在线视频| 毛片网站免费观看| 男人天堂亚洲| 一本到三区不卡视频| 天天看片天天操| 国产女人在线观看| 亚洲综合在线五月| 国产精品video| 精品国产www| 日韩在线影视| 久久夜色精品国产欧美乱| 日本污视频在线观看| 日韩高清在线观看一区二区| 亚洲精品在线91| 欧美卡一卡二卡三| 99er精品视频| 亚洲人午夜色婷婷| 久久人人爽人人爽人人| 精品国产不卡一区二区| 亚洲开心激情网| 久久久久久视频| 日韩精品一级| 最新日韩中文字幕| 在线观看日本网站| 免费视频亚洲| 午夜精品久久久久久久白皮肤| 伊人网综合在线| 成人嫩草影院| 国产精品 欧美在线| 亚洲高清视频在线播放| 伊人成年综合电影网| 成人国产亚洲精品a区天堂华泰| 综合区小说区图片区在线一区| 国产精品久久久免费| 成人区精品一区二区| 97久精品国产片一区二区三区| 精品免费一区二区| 久久久久99精品久久久久| 国产无遮挡又黄又爽| 精品中文字幕一区二区三区四区| 亚洲美女视频网站| 18精品爽视频在线观看| 国产区精品视频在线观看豆花| 在线观看精品国产视频| 日韩 欧美 综合| 国产影视一区| 国产v综合ⅴ日韩v欧美大片| 亚洲av成人精品一区二区三区在线播放| 国产日韩专区| 久久婷婷国产综合尤物精品| 成年人免费网站在线观看| 99热在这里有精品免费| 大陆av在线播放| 国产黄在线看| 欧美色女视频| 久久久在线观看| 亚洲成人一二三区| 亚洲欧美不卡| 欧美精彩一区二区三区| 国产男女爽爽爽| 亚洲一级电影视频| 日韩免费高清一区二区| 欧美与亚洲与日本直播| 中文字幕日韩精品在线观看| 中文字幕在线观看你懂的| 国内自拍一区| 精品一区在线播放| 美女做a视频| 亚洲成在线观看| 强迫凌虐淫辱の牝奴在线观看| 欧美日韩国产网站| 欧美成人免费播放| 精品国产18久久久久久| 日韩精品一级二级| 日日噜噜夜夜狠狠久久丁香五月| 九色视频成人自拍| 日韩一区二区视频在线观看| 国产高潮久久久| 黄色成人精品网站| 日韩视频在线观看国产| 亚洲第一区视频| 日韩一级免费观看| 懂色av中文字幕| 午夜综合激情| 精品一区二区成人免费视频| 你懂的视频在线| 日韩欧美一区中文| 国产成人无码专区| 欧美一级二区| 亚洲区成人777777精品| 午夜毛片在线| 亚洲激情视频在线播放| 国产一区二区三区在线观看| 日韩电影在线看| 国产一线二线三线女| 免费黄色网址在线观看| 精品一区二区亚洲| 亚洲经典一区二区三区| 国产精品456| 911福利视频| 羞羞视频在线观看一区二区| 2019中文字幕在线观看| 日本h视频在线观看| 亚洲伊人色欲综合网| 欧美a级片免费看| 亚州av乱码久久精品蜜桃| 欧洲av一区| 在线观看美女网站大全免费| 国产一区二区美女视频| 久久一区二区免费播放| 日韩一区中文字幕| 貂蝉被到爽流白浆在线观看 | 亚洲午夜国产成人av电影男同| 亚洲经典一区二区三区| 26uuu久久天堂性欧美| 日韩www视频| 久久人人99| 亚洲精品在线视频观看| av网址在线看| 欧美韩日一区二区| 九九爱在线视频观看免费视频 | 国产探花在线观看视频| 18国产精品| 粉嫩av一区二区三区免费观看| 色视频免费在线观看| 日韩黄色在线免费观看| 十八禁一区二区三区| 国产精品乱子久久久久| 性少妇xx生活| 一区二区毛片| 福利在线一区二区三区| 日本午夜精品久久久久| 成人两性免费视频| 伊人色综合久久| 国产亚洲精品久久久久久牛牛| 四虎影视最新网站入口在线观看| 亚洲精品成人少妇| 久久久久久久极品内射| 精品一区二区三区日韩| 中文字幕乱妇无码av在线| 加勒比久久综合| 欧美在线观看黄| 高清一区二区三区av| 国产精品 日韩| 最新超碰在线| 日韩美女主播视频| 伊人75在线| 久久天天躁狠狠躁夜夜躁2014| 成年女人免费v片| 精品欧美一区二区三区精品久久| 一本大道一区二区三区| 天天av天天翘天天综合网| 中文字幕你懂的| 国产三级欧美三级| 国产精品第72页| 高清shemale亚洲人妖| 最近中文字幕在线mv视频在线| 一本不卡影院| 香蕉视频色在线观看| 亚洲激情五月| 波多野结衣天堂| 精品香蕉视频| 国产在线精品91| 国产91精品入| 看一级黄色录像| 一区二区三区在线资源| 一区二区三区四区在线视频 | 国产 日韩 欧美 精品| 一区二区在线观看免费| 波多野结衣视频在线观看| 国产日产欧产精品推荐色| 懂色av.com| 99r国产精品| 五月天婷婷综合网| 国产日韩欧美精品一区| 色婷婷在线观看视频| 91色.com|