• 已解决 73482 个问题
  • 已帮助 5993 位优秀工程师

16×16点阵的贪吃蛇程序源码分享一下

hangtao 2019-01-21 浏览量:941
16×16点阵的贪吃蛇程序源码分享一下
0 0 收起

我来回答

上传资料:
选择文件 文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
最佳答案
  • 有点长哦 


    #include<reg52.h>

    #include<display.h>
    #include <stdlib.h>
    #define up 0x01
    #define down 0x02
    #define left 0x03
    #define right 0x04
    unsigned char code tab[][16]={

    0x000x000xE00x0F0x100x100x080x200x080x200x100x100xE00x0F0x000x00/*"0"0*/

    0x000x000x100x200x100x200xF80x3F0x000x200x000x200x000x000x000x00/*"1"1*/

    0x000x000x700x300x080x280x080x240x080x220x880x210x700x300x000x00/*"2"2*/

    0x000x000x300x180x080x200x880x200x880x200x480x110x300x0E0x000x00/*"3"3*/

    0x000x000x000x070xC00x040x200x240x100x240xF80x3F0x000x240x000x00/*"4"4*/

    0x000x000xF80x190x080x210x880x200x880x200x080x110x080x0E0x000x00/*"5"5*/

    0x000x000xE00x0F0x100x110x880x200x880x200x180x110x000x0E0x000x00/*"6"6*/

    0x000x000x380x000x080x000x080x3F0xC80x000x380x000x080x000x000x00/*"7"7*/

    0x000x000x700x1C0x880x220x080x210x080x210x880x220x700x1C0x000x00/*"8"8*/

    0x000x000xE00x000x100x310x080x220x080x220x100x110xE00x0F0x000x00/*"9"9*/

    };
    sbit en=P0^0;
    sbit K1=P2^4;
    sbit K2=P2^5;
    sbit K3=P2^6;
    sbit K4=P2^7;
    bit scan_key();
    void proc_key() ;
    unsigned char key_skey_vkey=0x04;
    unsigned char idex=0;
    unsigned char xp=8yp=7fxfy;
    unsigned int ct=5000;

    bit flag=0;
    bit rest=0;
    bit start=0;

    void delay(int c)
        {
        int ij;
        for(i=0;i<c;i++)
            for(j=0;j<10;j++)
                ;
         }
    unsigned char n=3;
    unsigned char i;
    unsigned char idata man[80][2];
    unsigned char idata food[2];
    void bring_food()
    {

       
        unsigned char ik=0;
        
        while(k==0)
        { srand(TL0);
            k=1;

            fx=rand()%15;
            fy=rand()%15;
            if(fx==0||fy==0||fy>14||fx>14)
            {
                k=0;
                continue;

            }
            for(i=0;i<n;i++)
                if((fx==man[i][0])&&(fy==man[i][1]))
                {
                    k=0;
                    break;
                }

        }
      food[0]=fx;
      food[1]=fy;
     drapoint(fxfy);

    }
    void fenshu()
    {  unsigned char i;
       for(i=0;i<16;i++)
        {buf[i]=tab[(n-3)/10][i];
    delay(100);
    }
       for(i=16;i<32;i++)
        {
    buf[i]=tab[(n-3)%10][i-16];
        delay(100);
    }
    delay(10000);
    delay(10000);

    }
    void restl()
    { start=0;
    flag=0;
       xp=8;
       yp=7;
       n=3;
       key=0x04;
       t=5000;
    clear();

    for(i=0;i<8;i++)
    {  drapoint(i0);
       drapoint(15-i0);
       drapoint(i15);
       drapoint(15-i15);
       drapoint(0i);
         drapoint(015-i);
       drapoint(15i);
       drapoint(1515-i);
       delay(1000);


    delay(10000);
    bring_food();
    man[0][0]=6;
    man[0][1]=7;
    man[1][0]=7;
    man[1][1]=7;
    man[2][0]=8;
    man[2][1]=7;
    for(i=0;i<n;i++)
        drapoint(man[i][0]man[i][1]);
    flag=1;


     }

     void end()
     {   unsigned char ij;
         for(i=0;i<16;i++)
    for(j=0;j<16;j++)
      { drapoint(ij);
        delay(100);
      }
     }
     void pd()
     { unsigned char i;
        for(i=0;i<n;i++)
       { if(man[i][0]==xp&&man[i][1]==yp)
        { rest=1;break; }
      }
     
     }
    void main()
    {   
        en=1;
    TMOD=0x11;
        TH0=0xfc;
        TL0=0x18;
        TH1=0xb1;
     TL1=0xe0;
    TR0=1;
        ET0=1;
        TR1=1;
        ET1=1;
        EA=1;
    restl();
    while(1)
       {  while(!start);
        
        if(flag==1)
      { switch (key)
      { case up:
        { 
    yp++;
    if(yp==15)
    { rest=1;break; }
        pd();
    if(xp==food[0]&&yp==food[1])
    {  if(t>100) 
       t-=100;
       n++;
       man[n-1][0]=xp;
       man[n-1][1]=yp;
       bring_food(); break;
    }
    else {   
    clrpoint(man[0][0]man[0][1]);
    for(i=0;i<n-1;i++)
    { man[i][0]=man[i+1][0];
       man[i][1]=man[i+1][1];
    }
    man[n-1][0]=xp;
    man[n-1][1]=yp;
    for(i=0;i<16;i++)

       drapoint(i15);
       
       

      drapoint(fxfy);
    for(i=0;i<n;i++)
        drapoint(man[i][0]man[i][1]);
    break; }
        case down:    
    {
    yp--;
    if(yp==0)
    { rest=1;break; }
         pd();
    if(xp==food[0]&&yp==food[1])
    {   if(t>100) 
       t-=100;
       n++;
       man[n-1][0]=xp;
       man[n-1][1]=yp;
       bring_food();  break;
    }
    else {
    clrpoint(man[0][0]man[0][1]);

    for(i=0;i<n-1;i++)
    { man[i][0]=man[i+1][0];
       man[i][1]=man[i+1][1]; 
    }
    man[n-1][0]=xp;
    man[n-1][1]=yp;
    for(i=0;i<16;i++)

       drapoint(i15);
      

    drapoint(fxfy);
    for(i=0;i<n;i++)
        drapoint(man[i][0]man[i][1]);
    break;    }    }
        case left:   
    {  
    xp--;
    if(xp==0)
    { rest=1;break; }
    pd();
        if(xp==food[0]&&yp==food[1])
    {  if(t>100) 
       t-=100;
       n++;
       man[n-1][0]=xp;
       man[n-1][1]=yp;
       bring_food();  break;
    }
    else {
    clrpoint(man[0][0]man[0][1]);
    for(i=0;i<n-1;i++)
    { man[i][0]=man[i+1][0];
       man[i][1]=man[i+1][1]; 
    }
    man[n-1][0]=xp;
    man[n-1][1]=yp;
    for(i=0;i<16;i++)

       drapoint(i15);
     


      drapoint(fxfy);
    for(i=0;i<n;i++)
        drapoint(man[i][0]man[i][1]);
    break; }     }
        case right:  
    {
    xp++;
    pd();
    if(xp==15)
       { rest=1;break; }
    if(xp==food[0]&&yp==food[1])
    {   if(t>100) 
       t-=100;
       n++;
       man[n-1][0]=xp;
       man[n-1][1]=yp;
       bring_food();   break;
    }
    else {
    clrpoint(man[0][0]man[0][1]);
    for(i=0;i<n-1;i++)
    { man[i][0]=man[i+1][0];
       man[i][1]=man[i+1][1];
    }
    man[n-1][0]=xp;
    man[n-1][1]=yp;
    for(i=0;i<16;i++)

       drapoint(i15);


    drapoint(fxfy);
        for(i=0;i<n;i++)
        drapoint(man[i][0]man[i][1]);
           break;   } }
      }
      delay(t);
       }
        
     
      if(rest==1)
    { flag=0;
         end();
    fenshu();
         restl();
    rest=0;
    }
      }
    }
    bit scan_key()
    {
    key_s = 0x00;
    key_s |= K1;
    key_s <<= 1;
    key_s |= K2;
    key_s <<= 1;
    key_s |= K3;
    key_s <<= 1;
    key_s |= K4;
    return(key_s ^ key_v);
    }
    void proc_key()   //左
    {
    if((key_v & 0x01) == 0)
    { start=1;
         if(key!=left)
    key=right;
    }
    if((key_v & 0x02) == 0) //右
    { start=1; 
        if(key!=right)
    key=left;
        }
       if((key_v & 0x04) == 0)    //  上
    { start=1; 
         if(key!=down)
    key=up;
    }
    if((key_v & 0x08) == 0)    //  下
    {   
      start=1;
          if(key!=up)
          key=down;
    }



    }


    void timer0(void) interrupt 1
    {
      TH0=0xfc;    //扫描显示1ms
      TL0=0x18;
     en=1;
     P1=buf[2*idex];
     P3=buf[2*idex+1];
     P2=idex|0xf0;
     en=0;
     idex++;
     if(idex==16)
     idex=0;
     
     
    }
    void timer1(void) interrupt 3
    {
      TH1=0xb1;
     TL1=0xe0;
      
       
        if(scan_key())
    {
    delay(10);
    if(scan_key())
    {
    key_v = key_s;
    proc_key();
    }

     
       }
       
     }
    • 发布于 2019-01-21
    • 举报
    • 评论 0
    • 0
    • 0

其他答案 数量:5
  • CODE.rar

    能看到不?

    一直传不上去,如果还是看不到,你可以联系我 ,

    • 发布于2019-01-21
    • 举报
    • 评论 0
    • 0
    • 0

  • 我看到有个帖子,基于51单片机的16×16点阵的贪吃蛇。 你可以看
    • 发布于2019-01-29
    • 举报
    • 评论 0
    • 0
    • 0

  • 首先你得知道贪吃蛇是什么原理,其实就是根据你自己画的贪吃蛇算法去打点,一帧一帧打,你是参考不了别人的代码的,因为硬件连接不一定相同。
    • 发布于2019-01-30
    • 举报
    • 评论 0
    • 0
    • 0

  • 就是通过led移位算法实现的,可以在点阵屏例程上修改
    • 发布于2019-02-26
    • 举报
    • 评论 0
    • 0
    • 0

  • 建议参考安富莱的教程,里面有一个贪吃蛇的demo程序可以参考
    • 发布于2019-02-27
    • 举报
    • 评论 0
    • 0
    • 0

相关问题

问题达人换一批

16×16点阵的贪吃蛇程序源码分享一下