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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

共陽數碼管計分8*8點陣貪吃蛇游戲單片機源碼和proteus仿真

[復制鏈接]
跳轉到指定樓層
樓主
基于51單片機的8*8點陣貪吃蛇游戲
1、器件:51單片機、點陣、數碼管、三極管、按鍵等
2?梢岳鄯e分數


附上protues仿真、及程序


單片機源程序如下:

  1. #include <reg51.h>
  2. #include<stdlib.h>
  3. #define SNAKE 17                 //最大長度
  4. #define TIME 50                 //顯示延時時間
  5. #define SPEED 40         //速度控制         


  6. //計分
  7. sbit sw=P3^0;     //十位公共極
  8. sbit gw=P3^1;          //個位公共極

  9. unsigned char tab1[]={0xc0,0xf9,0xa4,0xb0,0x99,
  10.                        0x92,0x82,0xf8,0x80,0x90};           //個位

  11. unsigned char tab2[]= {0xc0,0xf9,0xa4,0xb0};          //十位
  12. sbit pause=P3^7;


  13. //定義方向   
  14. sbit  left=P3^3;
  15. sbit  down=P3^4;
  16. sbit right=P3^5;  
  17. sbit  up=P3^6;

  18. unsigned char x[SNAKE+1];                         //蛇身的坐標 行
  19. unsigned char y[SNAKE+1];                     //蛇身的坐標 列
  20. unsigned char time,n,i,e;              //延時時間,當前蛇長,通用循環變量,當前速度               
  21. char addx,addy;                // 移動方向,同直角坐標系,addx為橫向,addy為縱向
  22. bit again  ;//再次產生果實變量,


  23. //延時程序

  24. void delay(char MS)
  25. {
  26.   while(MS--)
  27.   ;

  28. }


  29. //判斷碰撞

  30. bit knock()
  31. {   bit k;
  32.       k=0;
  33.       if(x[1]>7||y[1]>7)  { k=1;}                             //撞墻
  34.      for(i=2;i<n;i++)
  35.            if((x[1]==x[i])&(y[1]==y[i]))    {k=1; } //撞自己
  36.     return k;       
  37. }



  38. //鍵位處理

  39. void turnkey()
  40. {
  41.    if(right==0)     {addy=0;   if(addx!=-1)  addx=1;           else   addx=-1;}
  42.      if(left==0)      {addy=0;  if(addx!=1)  addx=-1;         else addx=1;}
  43.        if(down==0)     {addx=0;   if(addy!=1)   addy=-1;       else addy=1;}
  44.         if(up==0)      {addx=0;   if(addy!=-1)   addy=1;   else addy=-1;}
  45. }


  46.                                            

  47. void score(unsigned char j)                               
  48. {
  49.        if(j<40)   
  50.            { P1=tab1[j%10];
  51.              gw=1;
  52.            delay(TIME+10) ;
  53.                 gw=0;
  54.      
  55.            P1=tab2[j/10];
  56.             sw=1;
  57.           delay(TIME+10);         
  58.                 sw=0;
  59.        }   
  60.                                                            
  61. }       
  62. //判斷具體的亮點

  63. char mux(unsigned char temp)
  64. {       
  65.    if(temp==7)     return 128;
  66.       if(temp==6)      return 64;
  67.          if(temp==5)     return 32;
  68.             if(temp==4)    return 16;
  69.               if(temp==3)   return 8;
  70.                 if(temp==2)   return 4;
  71.                  if(temp==1)   return 2;
  72.                    if(temp==0)   return 1;
  73.    return 0;
  74. }
  75. //顯示函數,按點從頭到尾掃描,周期為SNAKE,掃描k個周期運動一格

  76. void time0 (unsigned char k,unsigned char f)          //顯示k次
  77. {  
  78.   while(k--)
  79.    {  
  80.      
  81.      for(i=0;i<SNAKE+1;i++)                               //掃描整個虛擬蛇身
  82.        {
  83.              P2=mux(x[i]);   P0=255-mux(y[i]);              //按點依次顯示
  84.                    turnkey();                              //上下左右鍵位處理
  85.          score(f);                                        //顯示延遲
  86.                   P2=0x00;  P0=0xff;                                   //滅燈
  87.                
  88.        }
  89.     }
  90. }

  91. void main(void)
  92. {
  93. unsigned char f=0; pause=1;
  94.    e=SPEED;                 //給運動速度賦初值
  95.    while(1)      
  96.    {
  97.      for(i=3;i<SNAKE+1;i++)     {   x[i]=20;         y[i]=20;  }          //初始化虛擬蛇身
  98.              
  99.         x[0]=4;   y[0]=4;           //果子位置                           
  100.            n=3;                      //起始蛇長 n-=1                           
  101.         x[1]=1;   y[1]=0;                //蛇頭                       
  102.         x[2]=0;   y[2]=0;                   //蛇尾1                    
  103.                                                                                                                          
  104.         addx=0;   addy=0;                                       //位移偏移
  105.                                                                                                                     
  106.                   while(1)         
  107.             {
  108.                time0(e,f) ;
  109.                                  
  110.                  if( knock() )    { e=SPEED;break; }                          //判斷碰撞

  111.                    if( (x[0]==x[1]+addx) & (y[0]==y[1]+addy) )         //如果吃到東西
  112.                    {       
  113.                                       if(f<40)   {         f++;   score(f);  }                    //加分
  114.                                                  else f=0;                                                                          
  115.                                  n++;                          //蛇身加1
  116.                                       if(n==SNAKE+1)                  //如果蛇達到最大長度,進入下一關
  117.                                       {
  118.                                          n=3;         e-=10;  //蛇身長從2開始,運動加速        
  119.                                           for(i=3;i<SNAKE+1;i++)  {x[i]=20; y[i]=20;}         //初始化虛擬蛇身
  120.                                 }  
  121.                                                                   
  122.                                         do                           //產生果實
  123.                                          {       
  124.                                                      x[0]=rand()%8;y[0]=rand()%8;//產生隨機果實
  125.                                                     again=0;
  126.                                                      for(i=1;i<n;i++)                        //判斷是否與蛇身重疊
  127.                                                      if((x[0]==x[i])&(y[0]==y[i]))    again=1;
  128.                                      }while(again);                                        //若重疊則再次產生
  129.                

  130.                     }
  131.                                          if(pause)
  132.                                          {
  133.                        for(i=n-1;i>1;i--)                                              //蛇身從尾到頭移動
  134.                                          {x[i]=x[i-1];y[i]=y[i-1];}   
  135.                             x[1]=x[2]+addx;    y[1]=y[2]+addy;                    //蛇頭移動1格
  136.                                     }                 
  137.                                           
  138.                                                        
  139.                           }
  140.                                          
  141.                      }               
  142. }




  143. ……………………

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


所有資料51hei提供下載:
共陽數碼管計分點陣貪吃蛇.rar (63.87 KB, 下載次數: 102)


評分

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

查看全部評分

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

使用道具 舉報

沙發
ID:313328 發表于 2018-6-9 21:04 | 只看該作者
可以練習練習
回復

使用道具 舉報

板凳
ID:166284 發表于 2021-6-21 14:57 | 只看該作者
其實,你可以再上傳一個數碼管的下雨模式 的代碼 ,,,,謝謝
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 精品av | 精品国产一区二区三区久久影院 | 91精品国产91久久久久久密臀 | 国产一区二区精品在线 | 视频一区中文字幕 | 免费a国产 | 久久精品91久久久久久再现 | 亚洲欧美国产精品一区二区 | 亚洲成人久久久 | 男人的天堂视频网站 | 日韩欧美不卡 | 国产亚洲一区二区三区 | www视频在线观看 | www.国产| av黄色免费 | 中文字幕乱码视频32 | 欧美激情 一区 | 一级毛片视频 | 男女午夜激情视频 | 国产精品视频免费观看 | 欧美精品乱码99久久影院 | 精品91久久| 国产91网址 | 日韩视频在线观看一区二区 | 亚洲国产精品久久久久 | 日日想夜夜操 | 国产一区二区成人 | 国产福利资源在线 | 国产精品视频网站 | 一级片网址 | 中文字幕在线中文 | 亚洲人成人一区二区在线观看 | 日本欧美黄色片 | 国产精品高清一区二区三区 | 日韩欧美一级片 | 亚洲第一福利网 | 91xx在线观看 | 浴室洗澡偷拍一区二区 | 波多野结衣一区二区三区 | av中文在线 | 中文字幕亚洲区一区二 |