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

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

QQ登錄

只需一步,快速開(kāi)始

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

基于VC6.0的貪吃蛇游戲源碼

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
用VC6.0軟件寫(xiě)的一個(gè)貪吃蛇小游戲



貪吃蛇源程序如下:
  1. //*******************************************************  
  2. //*******************************************************  
  3. //******友情提示:如想速度快點(diǎn),請(qǐng)改小_sleep(500)函數(shù)中參數(shù)*****  
  4. //*******************************************************  
  5. //*******************如寫(xiě)的不好,請(qǐng)見(jiàn)諒*********************  
  6. //*******************************************************  
  7. #include <stdio.h>  
  8. #include <stdlib.h>  
  9. #include <conio.h>  
  10. #include <string.h>  
  11. #include <time.h>  
  12. const int H = 8;   //地圖的高  
  13. const int L = 16;  //地圖的長(zhǎng)  
  14. char GameMap[H][L];   //游戲地圖  
  15. int  key;  //按鍵保存  
  16. int  sum = 1, over = 0;  //蛇的長(zhǎng)度, 游戲結(jié)束(自吃或碰墻)  
  17. int  dx[4] = {0, 0, -1, 1};  //左、右、上、下的方向  
  18. int  dy[4] = {-1, 1, 0, 0};  
  19. struct Snake   //蛇的每個(gè)節(jié)點(diǎn)的數(shù)據(jù)類(lèi)型  
  20. {  
  21. int x, y;  //左邊位置  
  22. int now;   //保存當(dāng)前節(jié)點(diǎn)的方向, 0,1,2,3分別為左右上下  
  23. }Snake[H*L];  
  24. const char Shead = '@';  //蛇頭  
  25. const char Sbody = '#';  //蛇身  
  26. const char Sfood = '*';  //食物  
  27. const char Snode = '.';  //'.'在地圖上標(biāo)示為空  
  28. void Initial();  //地圖的初始化  
  29. void Create_Food(); //在地圖上隨機(jī)產(chǎn)生食物  
  30. void Show();   //刷新顯示地圖  
  31. void Button();  //取出按鍵,并判斷方向  
  32. void Move();   //蛇的移動(dòng)  
  33. void Check_Border();  //檢查蛇頭是否越界  
  34. void Check_Head(int x, int y);   //檢查蛇頭移動(dòng)后的位置情況  
  35. int main()   
  36. {  
  37. Initial();  
  38. Show();  
  39. return 0;  
  40. }  
  41. void Initial()  //地圖的初始化  
  42. {  
  43. int i, j;  
  44. int hx, hy;  
  45. system("title 貪吃蛇");  //控制臺(tái)的標(biāo)題  
  46. memset(GameMap, '.', sizeof(GameMap));  //初始化地圖全部為空'.'  
  47. system("cls");  
  48. srand(time(0));   //隨機(jī)種子  
  49. hx = rand()%H;    //產(chǎn)生蛇頭  
  50. hy = rand()%L;  
  51. GameMap[hx][hy] = Shead;  
  52. Snake[0].x = hx;  Snake[0].y = hy;  
  53. Snake[0].now = -1;  
  54. Create_Food();   //隨機(jī)產(chǎn)生食物  
  55. for(i = 0; i < H; i++)   //地圖顯示  
  56. {   
  57.   for(j = 0; j < L; j++)  
  58.    printf("%c", GameMap[i][j]);  
  59.   printf("\n");  
  60. }  
  61.      
  62. printf("\n小小C語(yǔ)言貪吃蛇\(yùn)n");  
  63. printf("按任意方向鍵開(kāi)始游戲\n");  
  64.    
  65. getch();   //先接受一個(gè)按鍵,使蛇開(kāi)始往該方向走  
  66. Button();  //取出按鍵,并判斷方向  
  67. }  
  68. void Create_Food()  //在地圖上隨機(jī)產(chǎn)生食物  
  69. {  
  70. int fx, fy;  
  71. while(1)  
  72. {  
  73.   fx = rand()%H;  
  74.      fy = rand()%L;  
  75.      
  76.   if(GameMap[fx][fy] == '.')  //不能出現(xiàn)在蛇所占有的位置  
  77.   {   
  78.    GameMap[fx][fy] = Sfood;  
  79.       break;  
  80.   }  
  81. }  
  82. }  
  83. void Show()  //刷新顯示地圖  
  84. {  
  85. int i, j;  
  86. while(1)  
  87. {   
  88.   _sleep(500); //延遲半秒(1000為1s),即每半秒刷新一次地圖  
  89.   Button();   //先判斷按鍵在移動(dòng)  
  90.   Move();  
  91.   if(over)  //自吃或碰墻即游戲結(jié)束  
  92.   {   
  93.    printf("\n**游戲結(jié)束**\n");  
  94.    printf("     >_<\n");  
  95.    getchar();  
  96.       break;  
  97.   }  
  98.   system("cls");   //清空地圖再顯示刷新吼的地圖  
  99.   for(i = 0; i < H; i++)   
  100.   {   
  101.    for(j = 0; j < L; j++)  
  102.     printf("%c", GameMap[i][j]);  
  103.    printf("\n");  
  104.   }  
  105.      
  106.   printf("\n小小C語(yǔ)言貪吃蛇\(yùn)n");  
  107.   printf("按任意方向鍵開(kāi)始游戲\n");  
  108. }  
  109. }  
  110. void Button()  //取出按鍵,并判斷方向  
  111. {  
  112. if(kbhit() != 0) //檢查當(dāng)前是否有鍵盤(pán)輸入,若有則返回一個(gè)非0值,否則返回0  
  113. {   
  114.   while(kbhit() != 0)  //可能存在多個(gè)按鍵,要全部取完,以最后一個(gè)為主  
  115.       key = getch(); //將按鍵從控制臺(tái)中取出并保存到key中  
  116.   switch(key)  
  117.   {   //左  
  118.    case 75:  Snake[0].now = 0;  
  119.           break;  
  120.             //右  
  121.             case 77:  Snake[0].now = 1;      
  122.           break;  
  123.             //上  
  124.    case 72:  Snake[0].now = 2;  
  125.           break;  
  126.             //下  
  127.    case 80:  Snake[0].now = 3;  
  128.           break;  
  129.   }  
  130. }  
  131. }  
  132. void Move()   //蛇的移動(dòng)  
  133. {  
  134. int i, x, y;  
  135.     int t = sum;  //保存當(dāng)前蛇的長(zhǎng)度  
  136. //記錄當(dāng)前蛇頭的位置,并設(shè)置為空,蛇頭先移動(dòng)  
  137. x = Snake[0].x;  y = Snake[0].y;  GameMap[x][y] = '.';  
  138. Snake[0].x = Snake[0].x + dx[ Snake[0].now ];  
  139. Snake[0].y = Snake[0].y + dy[ Snake[0].now ];  
  140. Check_Border();   //蛇頭是否越界  
  141. Check_Head(x, y);  //蛇頭移動(dòng)后的位置情況,參數(shù)為: 蛇頭的開(kāi)始位置  
  142. if(sum == t)  //未吃到食物即蛇身移動(dòng)哦  
  143.     for(i = 1; i < sum; i++)  //要從蛇尾節(jié)點(diǎn)向前移動(dòng)哦,前一個(gè)節(jié)點(diǎn)作為參照  
  144. {  
  145.   if(i == 1)   //尾節(jié)點(diǎn)設(shè)置為空再移動(dòng)  
  146.    GameMap[ Snake[i].x ][ Snake[i].y ] = '.';  
  147.      
  148.   if(i == sum-1)  //為蛇頭后面的蛇身節(jié)點(diǎn),特殊處理  
  149.   {  
  150.    Snake[i].x = x;  
  151.          Snake[i].y = y;  
  152.       Snake[i].now = Snake[0].now;  
  153.   }  
  154.   else   //其他蛇身即走到前一個(gè)蛇身位置  
  155.   {  
  156.    Snake[i].x = Snake[i+1].x;  
  157.          Snake[i].y = Snake[i+1].y;  
  158.       Snake[i].now = Snake[i+1].now;  
  159.   }  
  160.       
  161.   GameMap[ Snake[i].x ][ Snake[i].y ] = '#'; //移動(dòng)后要置為'#'蛇身   
  162. }  
  163. }  
  164. void Check_Border()  //檢查蛇頭是否越界  
  165. {  
  166. if(Snake[0].x < 0 || Snake[0].x >= H  
  167. || Snake[0].y < 0 || Snake[0].y >= L)  
  168.      over = 1;  
  169. }  
  170. void Check_Head(int x, int y)  //檢查蛇頭移動(dòng)后的位置情況  
  171. {  
  172.    
  173. if(GameMap[ Snake[0].x ][ Snake[0].y ] == '.')  //為空  
  174.   GameMap[ Snake[0].x ][ Snake[0].y ] = '@';  
  175. else
  176.   if(GameMap[ Snake[0].x ][ Snake[0].y ] == '*')  //為食物  
  177.   {  
  178.    GameMap[ Snake[0].x ][ Snake[0].y ] = '@';   
  179.    Snake[sum].x = x;   //新增加的蛇身為蛇頭后面的那個(gè)  
  180.       Snake[sum].y = y;  
  181.       Snake[sum].now = Snake[0].now;  
  182.          GameMap[ Snake[sum].x ][ Snake[sum].y ] = '#';   
  183.    sum++;  
  184.    Create_Food();  //食物吃完了馬上再產(chǎn)生一個(gè)食物  
  185.   }  
  186.   else
  187.    over = 1;  
  188. }
復(fù)制代碼

所有資料51hei提供下載:
貪吃蛇.7z (202.08 KB, 下載次數(shù): 14)


評(píng)分

參與人數(shù) 1黑幣 +5 收起 理由
18701882550 + 5

查看全部評(píng)分

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

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 紧缚调教一区二区三区视频 | 亚洲手机视频在线 | 黑人久久 | 欧美日韩国产高清 | 免费观看一级毛片 | 在线观看欧美日韩视频 | 成人免费毛片在线观看 | 天天久久 | 国产精品亚洲成在人线 | 精品美女视频在线观看免费软件 | 国产精品欧美一区二区三区不卡 | 91麻豆精品国产91久久久久久久久 | 一区中文字幕 | 麻豆changesxxx国产 | 一级毛片免费视频观看 | 精品在线观看入口 | 欧美视频精品 | 91久久久精品国产一区二区蜜臀 | 一区中文字幕 | 亚洲高清av | 中文字幕成人av | 一本色道精品久久一区二区三区 | 国产激情在线看 | 久久久久国产精品一区二区 | 国产欧美在线一区二区 | 在线一区二区三区 | 天天综合国产 | 精品国产精品三级精品av网址 | 久久99精品国产 | 欧美视频在线观看 | 亚洲视频1区 | www.99久久.com | 精品国产乱码一区二区三区 | www.一级毛片 | 亚洲精品一级 | 天天插天天搞 | 日韩一区精品 | 欧美日韩综合 | 久久国产成人午夜av影院武则天 | 成人一区二区三区视频 | 久久av一区二区 |