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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3204|回復: 2
打印 上一主題 下一主題
收起左側

單片機超級點陣貪吃蛇程序 MAX7219點陣屏顯示 數碼管計分

[復制鏈接]
跳轉到指定樓層
樓主
無聊寫了個貪吃蛇程序,用了stc89c52作為MCU,MAX7219點陣屏用于顯示,TM1637數碼管模塊用于記分。
雖然說游戲只有8*8的顯示;但是極其好玩。

制作出來的實物圖如下:


單片機源程序如下:
  1. #include "max7219.h"
  2. #include "reg52.h"
  3. #include "stdlib.h"
  4. #include "TM1637.h"
  5. #define u8 unsigned char
  6. #define u16 unsigned int
  7. u16 POINT;

  8. void Tanchishe_Init();
  9. void Write_She();
  10. void Move_She();
  11. bit Game_Over();
  12. u8 Key();
  13. void Create_Food();
  14. bit Eat_food();
  15. u8 start();
  16. u8 Last_X;
  17. u8 Last_Y;
  18. u8 S_Config;
  19. struct Snake
  20. {
  21.                 u8 direct;//方向  0上  1下   2左   3右
  22.                 u8 x_Snake[30];  //0為蛇頭
  23.                 u8 y_Snake[30];  //0為蛇尾
  24.                 u8 lenth;//長度
  25.                 u8 Food_X;//食物X
  26.                 u8 Food_Y;//食物Y
  27. }snake;
  28. void main()
  29. {
  30. //        u8 jx;        
  31.         P2=0xff;
  32.        
  33.         Init_MAX7219();
  34.         TM1637_display(POINT%10000/1000,POINT%1000/100,POINT%100/10,POINT%10,0);
  35.         while(1)
  36.         {
  37.                 put();
  38.                 Tanchishe_Init();
  39.                 S_Config=start();
  40.                 POINT=0;
  41.                 CLR();
  42.                 Write_She();
  43.                 Write_All();
  44.                 Delay_xms(500);
  45.        

  46.         while(!Game_Over())
  47.         {
  48.                 u8 HYM;
  49.                 u8 p=S_Config;
  50.                 Move_She();
  51.                 if(Eat_food())
  52.                 {
  53.                         Create_Food();
  54.                         POINT++;
  55.                 }
  56.                 TM1637_display(POINT%10000/1000,POINT%1000/100,POINT%100/10,POINT%10,0);
  57.                 CLR();
  58.                 Write_She();
  59.                 Write_All();
  60.                 while(p--)
  61.                 {
  62.                         HYM=Key();
  63.                         if(HYM!=4)
  64.                         {
  65.                                 snake.direct=HYM;
  66.                         }
  67.                         Delay_xms(2);
  68.                 }
  69.         }
  70.         //for(jx=1;jx<9;jx++)
  71.         //{
  72.         //        Write_Max7219(jx,0xff);
  73.         //}
  74.         }

  75.         //while(1);
  76. }

  77. u8 Key()
  78. {
  79.         u8 h;
  80.         switch(P2&0xf0)
  81.         {
  82.                 case 0x70:
  83.                 if(snake.direct!=1)
  84.                 {h=0;}
  85.                 else
  86.                 {h=4;}
  87.                 break;
  88.                 case 0xb0:
  89.                 if(snake.direct!=0)
  90.                 {h=1;}
  91.                 else
  92.                 {h=4;}
  93.                 break;
  94.                 case 0xd0:if(snake.direct!=3){h=2;}else{h=4;}break;
  95.                 case 0xe0:if(snake.direct!=2){h=3;}else{h=4;}break;
  96.                 default:h=4;break;
  97.         }
  98.         return h;
  99. }

  100. void Tanchishe_Init()
  101. {
  102.         snake.direct=3;
  103.         snake.x_Snake[0]=4;
  104.         snake.y_Snake[0]=2;
  105.         snake.x_Snake[1]=4;
  106.         snake.y_Snake[1]=3;
  107.         snake.x_Snake[2]=4;
  108.         snake.y_Snake[2]=4;       
  109.         snake.lenth=3;
  110. }

  111. void Write_She()
  112. {
  113.         int i;
  114.         for(i=0;i<snake.lenth;i++)
  115.         {
  116.                 Write_A_Dot(snake.x_Snake[i],snake.y_Snake[i]);
  117.         }
  118.         Write_A_Dot(snake.Food_X,snake.Food_Y);
  119. }

  120. void Move_She()
  121. {
  122.         u8 i=snake.lenth-1;
  123.         Last_X=snake.x_Snake[i];
  124.         Last_Y=snake.y_Snake[i];
  125.         switch(snake.direct)
  126.         {
  127.                 case 0:
  128.                 while(i>0)
  129.                 {
  130.                         snake.x_Snake[i]=snake.x_Snake[i-1];
  131.                         snake.y_Snake[i]=snake.y_Snake[i-1];
  132.                         i--;
  133.                 }
  134.                 snake.y_Snake[0]++;
  135.                 snake.y_Snake[0]%=8;
  136.                 break;
  137.                 case 1:
  138.                 while(i>0)
  139.                 {
  140.                         snake.x_Snake[i]=snake.x_Snake[i-1];
  141.                         snake.y_Snake[i]=snake.y_Snake[i-1];
  142.                         i--;
  143.                 }
  144.                 snake.y_Snake[0]--;       
  145.                 snake.y_Snake[0]%=8;
  146.                 break;
  147.                 case 2:
  148.                 while(i>0)
  149.                 {
  150.                         snake.x_Snake[i]=snake.x_Snake[i-1];
  151.                         snake.y_Snake[i]=snake.y_Snake[i-1];
  152.                         i--;
  153.                 }
  154.                 snake.x_Snake[0]--;
  155.                 snake.x_Snake[0]%=8;
  156.                 break;
  157.                 case 3:
  158.                 while(i>0)
  159.                 {
  160.                         snake.x_Snake[i]=snake.x_Snake[i-1];
  161.                         snake.y_Snake[i]=snake.y_Snake[i-1];
  162.                         i--;
  163.                 }
  164.                 snake.x_Snake[0]++;       
  165.                 snake.x_Snake[0]%=8;
  166.                 break;
  167.         }
  168. }


  169. void Create_Food()
  170. {
  171.         u16 x,y;
  172.         u8 j;
  173.         bit flag=0;
  174.         x=rand()/4096;
  175.         y=rand()/4096;
  176.         for(j=0;j<snake.lenth;j++)
  177.         {
  178.                 if(snake.x_Snake[j]==x&&snake.y_Snake[j]==y)
  179.                 {
  180.                         flag=1;
  181.                         break;
  182.                 }
  183.         }
  184.         if(flag)
  185.         {
  186.                 Create_Food();
  187.         }
  188.         else
  189.         {
  190.                 snake.Food_X=x;
  191.                 snake.Food_Y=y;
  192.         }
  193. }

  194. bit Eat_food()
  195. {
  196.         if(snake.Food_X==snake.x_Snake[0]&&snake.Food_Y==snake.y_Snake[0])
  197.         {
  198.                 snake.x_Snake[snake.lenth]=Last_X;
  199.                 snake.y_Snake[snake.lenth]=Last_Y;               
  200.                 snake.lenth++;               
  201.                 return 1;
  202.         }
  203.         else
  204.         {
  205.                 return 0;
  206.         }
  207. }

  208. bit Game_Over()
  209. {
  210.         u8 j;
  211.         for(j=1;j<snake.lenth;j++)
  212. ……………………

  213. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼

所有資料51hei提供下載:
超級貪吃蛇.zip (31.71 KB, 下載次數: 55)

評分

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

查看全部評分

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

使用道具 舉報

沙發
ID:988587 發表于 2021-12-6 14:43 | 只看該作者
請問有PCB和protues嗎?
回復

使用道具 舉報

板凳
ID:989532 發表于 2021-12-8 12:39 | 只看該作者
請問貪吃蛇有protues和接線圖嗎
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 久草热播 | 网址黄 | 精品一区二区免费视频 | 国产不卡一区 | 午夜免费观看网站 | 欧美一级一 | 噜噜噜噜狠狠狠7777视频 | 国产欧美精品一区二区 | 国产黄色一级电影 | 伊人亚洲 | 久国久产久精永久网页 | 性色视频 | 性色网站 | 日韩第一区| 精品亚洲一区二区三区 | 日韩欧美在线视频观看 | 亚洲视频免费在线观看 | 特级做a爰片毛片免费看108 | 日韩欧美一区二区在线播放 | 国产欧美视频一区二区 | 国产精品一区二 | 日韩在线免费 | 国产精品永久久久久久久www | 五月精品视频 | 久久专区| 免费观看一级毛片 | 在线播放中文字幕 | 亚洲精品一区二区三区四区高清 | 影音先锋欧美资源 | 九九亚洲精品 | 久草精品视频 | 亚洲午夜小视频 | 色婷婷久久 | 成人一区二区三区在线观看 | 久久精品中文字幕 | 亚洲精品www久久久 www.蜜桃av | 日本欧美国产在线观看 | 亚洲午夜精品 | 亚洲国产精品99久久久久久久久 | 女同久久另类99精品国产 | 综合精品久久久 |