[i.MX] 贪吃蛇游戏

[复制链接]
1134|5
 楼主| neeringstu 发表于 2016-1-23 20:44 | 显示全部楼层 |阅读模式
void dingshi() interrupt 1  using 1  //定时程序.产生步进时间
{
   if(p--)
   {
    TL0=0;
    TH0=0xa0;
    flag1=0;
   }
   else
   {
     flag1=1;
     TL0=0;
     TH0=0x00;
     p=20-(dengji>>1);
   }
}
/*开始确认暂停键的判断*/
void zhongduan1() interrupt 2 using 2
{
   if(!flag5)
   {
     flag5=1;
   }
   else
   {
     flag5=0;
   }
}
void zhongduan() interrupt 0 using 0
  {
    uchar i=0;
    if(first)           //FIRST=1;打开方向按键判断标志
    {
    first=0;        
    k=(P2>>6);      
    k=k&0x03;               
    if(flag)
      {
        if(k==1)     direction=3;//左
        if(k==2)     direction=1;//右
         }
      else
       {
        if(k==0)     direction=4;//上
        if(k==3)     direction=2;//下
         }
    }
  }
/*显示四个小格的方块*/
void playbuf(uchar buff,char offsetx,char offsety)      
{
  //i=(moxing+((dat&0xf0)|((dat&0x0f)<<2)));
  change1((((*(moxing+((buff&0xf0)+((buff&0x0f)<<2))))&0xf0)>>4)+offsetx,((*((moxing+((buff&0xf0)|((buff&0x0f)<<2)))))&0x0f)+offsety);
  change1((((*((moxing+((buff&0xf0)+((buff&0x0f)<<2))+1)))&0xf0)>>4)+offsetx,((*(((moxing+((buff&0xf0)|((buff&0x0f)<<2))))+1))&0x0f)+offsety);
  change1((((*(((moxing+((buff&0xf0)|((buff&0x0f)<<2))))+2))&0xf0)>>4)+offsetx,((*((moxing+((buff&0xf0)|((buff&0x0f)<<2)))+2))&0x0f)+offsety);
  change1((((*(((moxing+((buff&0xf0)|((buff&0x0f)<<2))))+3))&0xf0)>>4)+offsetx,((*((moxing+((buff&0xf0)|((buff&0x0f)<<2)))+3))&0x0f)+offsety);

}
 楼主| neeringstu 发表于 2016-1-23 20:46 | 显示全部楼层
  1. /*判断方块停止向下运动*/
  2. bit tingzhixia(uchar buff,char offsetx,char offsety)
  3. {
  4.    char x0,y0,x1,y1,x2,y2,x3,y3;
  5.    bit tz=0;
  6.    x0=(((*(moxing+((buff&0xf0)|((buff&0x0f)<<2))))&0xf0)>>4)+offsetx;
  7.    x1=(((*((moxing+((buff&0xf0)|((buff&0x0f)<<2))+1)))&0xf0)>>4)+offsetx;
  8.    x2=(((*((moxing+((buff&0xf0)|((buff&0x0f)<<2)))+2))&0xf0)>>4)+offsetx;
  9.    x3=(((*((moxing+((buff&0xf0)|((buff&0x0f)<<2)))+3))&0xf0)>>4)+offsetx;
  10.    y2=((*((moxing+((buff&0xf0)|((buff&0x0f)<<2)))+2))&0x0f)+offsety;
  11.    y3=((*((moxing+((buff&0xf0)|((buff&0x0f)<<2)))+3))&0x0f)+offsety;
  12.    y0=((*(moxing+((buff&0xf0)|((buff&0x0f)<<2))))&0x0f)+offsety;
  13.    y1=((*((moxing+((buff&0xf0)|((buff&0x0f)<<2)))+1))&0x0f)+offsety;
  14.    
  15.    if(readfk(x0+1,y0))
  16.    {
  17.       if(!((((x0+1)==x1)&&(y0==y1))|(((x0+1)==x2)&&(y0==y2))|(((x0+1)==x3)&&(y0==y3))))
  18.          {
  19.           tz=1;
  20.           }
  21.    }
  22.     if(readfk(x1+1,y1))
  23.    {
  24.       if(!((((x1+1)==x0)&&(y1==y0))|(((x1+1)==x2)&&(y1==y2))|(((x1+1)==x3)&&(y1==y3))))
  25.          {
  26.           tz=1;
  27.          }
  28.    }
  29.    if(readfk(x2+1,y2))
  30.    {
  31.       if(!((((x2+1)==x0)&&(y2==y0))|(((x2+1)==x1)&&(y2==y1))|(((x2+1)==x3)&&(y2==y3))))
  32.           {
  33.            tz=1;
  34.           }
  35.    }
  36.    if(readfk(x3+1,y3))
  37.    {
  38.       if(!((((x3+1)==x0)&&(y3==y0))|(((x3+1)==x1)&&(y3==y1))|(((x3+1)==x2)&&(y3==y2))))
  39.           {
  40.            tz=1;
  41.           }
  42.    }
  43.    return(tz);
  44. }
  45. /*判断一行是否可以消除*/
  46. bit hangman(uchar x)
  47. {
  48. uchar i;
  49. bit   man=1;
  50. for(i=0;i<15;i++)
  51. {
  52.         man=man&(readfk(x,i));
  53.         if(!man)
  54.         break;
  55. }
  56. return(man);
  57. }
  58. /*消除一行*/
  59. void xiaohang(uchar x)
  60. {
  61.   uchar i,j;
  62.   for(i=0;i<15;i++)
  63.   {
  64.     clear1(x,i);
  65.   }
  66.   for(i=1;i<=x;i++)
  67.   {
  68.    for(j=0;j<15;j++)
  69.    {
  70.      if(readfk(x-i,j))
  71.          {
  72.           change1(x-i+1,j);
  73.           clear1(x-i,j);
  74.          }
  75.    }
  76.   }
  77. }
 楼主| neeringstu 发表于 2016-1-23 20:46 | 显示全部楼层
  1. /*判断是否停止向右*/
  2. bit tingzhiyou(uchar buff,char offsetx,char offsety)
  3. {
  4.    char x0,y0,x1,y1,x2,y2,x3,y3;
  5.    bit tz=0;
  6.    x0=(((*(moxing+((buff&0xf0)|((buff&0x0f)<<2))))&0xf0)>>4)+offsetx;
  7.    x1=(((*((moxing+((buff&0xf0)|((buff&0x0f)<<2))+1)))&0xf0)>>4)+offsetx;
  8.    x2=(((*((moxing+((buff&0xf0)|((buff&0x0f)<<2)))+2))&0xf0)>>4)+offsetx;
  9.    x3=(((*((moxing+((buff&0xf0)|((buff&0x0f)<<2)))+3))&0xf0)>>4)+offsetx;
  10.    y2=((*((moxing+((buff&0xf0)|((buff&0x0f)<<2)))+2))&0x0f)+offsety;
  11.    y3=((*((moxing+((buff&0xf0)|((buff&0x0f)<<2)))+3))&0x0f)+offsety;
  12.    y0=((*(moxing+((buff&0xf0)|((buff&0x0f)<<2))))&0x0f)+offsety;
  13.    y1=((*((moxing+((buff&0xf0)|((buff&0x0f)<<2)))+1))&0x0f)+offsety;
  14.    if(readfk(x0,y0-1))
  15.    {
  16.       if(!(((x0==x1)&&((y0-1)==y1))|((x0==x2)&&((y0-1)==y2))|((x0==x3)&&((y0-1)==y3))))
  17.          {
  18.            tz=1;
  19.           }
  20.    }
  21.    if(readfk(x1,y1-1))
  22.      {
  23.       if(!(((x1==x0)&&((y1-1)==y0))|((x1==x2)&&((y1-1)==y2))|((x1==x3)&&((y1-1)==y3))))
  24.          {
  25.           tz=1;          
  26.          }
  27. }
  28.     if(readfk(x2,y2-1))
  29.    {
  30.       if(!(((x2==x0)&&((y2-1)==y0))|((x2==x1)&&((y2-1)==y1))|((x2==x3)&&((y2-1)==y3))))
  31.           {
  32.            tz=1;
  33.           }
  34.    }
  35.       if(readfk(x3,y3-1))
  36.    {
  37.       if(!(((x3==x0)&&((y3-1)==y0))|((x3==x1)&&((y3-1)==y1))|((x3==x2)&&((y3-1)==y2))))
  38.           {
  39.            tz=1;
  40.           }
  41.    }
  42.    return(tz);
  43. }
  44. /*判断是否停止向左*/
  45. bit tingzhizuo(uchar buff,char offsetx,char offsety)
  46. {
  47.    char x0,y0,x1,y1,x2,y2,x3,y3;
  48.    bit tz=0;
  49.    x0=(((*(moxing+((buff&0xf0)|((buff&0x0f)<<2))))&0xf0)>>4)+offsetx;
  50.    x1=(((*((moxing+((buff&0xf0)|((buff&0x0f)<<2))+1)))&0xf0)>>4)+offsetx;
  51.    x2=(((*((moxing+((buff&0xf0)|((buff&0x0f)<<2)))+2))&0xf0)>>4)+offsetx;
  52.    x3=(((*((moxing+((buff&0xf0)|((buff&0x0f)<<2)))+3))&0xf0)>>4)+offsetx;
  53.    y2=((*((moxing+((buff&0xf0)|((buff&0x0f)<<2)))+2))&0x0f)+offsety;
  54.    y3=((*((moxing+((buff&0xf0)|((buff&0x0f)<<2)))+3))&0x0f)+offsety;
  55.    y0=((*(moxing+((buff&0xf0)|((buff&0x0f)<<2))))&0x0f)+offsety;
  56.    y1=((*((moxing+((buff&0xf0)|((buff&0x0f)<<2)))+1))&0x0f)+offsety;
  57.    if(readfk(x0,y0+1))
  58.    {
  59.       if(!(((x0==x1)&&((y0+1)==y1))|((x0==x2)&&((y0+1)==y2))|((x0==x3)&&((y0+1)==y3))))
  60.          {
  61.            tz=1;
  62.           }
  63.    }
  64.    if(readfk(x1,y1+1))
  65.      {
  66.       if(!(((x1==x0)&&((y1+1)==y0))|((x1==x2)&&((y1+1)==y2))|((x1==x3)&&((y1+1)==y3))))
  67.          {
  68.           tz=1;          
  69.          }
  70. }
  71.     if(readfk(x2,y2+1))
  72.    {
  73.       if(!(((x2==x0)&&((y2+1)==y0))|((x2==x1)&&((y2+1)==y1))|((x2==x3)&&((y2+1)==y3))))
  74.           {
  75.            tz=1;
  76.           }
  77.    }
  78.       if(readfk(x3,y3+1))
  79.    {
  80.       if(!(((x3==x0)&&((y3+1)==y0))|((x3==x1)&&((y3+1)==y1))|((x3==x2)&&((y3+1)==y2))))
  81.           {
  82.            tz=1;
  83.           }
  84.    }
  85.    return(tz);
  86. }
 楼主| neeringstu 发表于 2016-1-23 20:48 | 显示全部楼层
  1. /*清除一个方块*/
  2. void clearbuf(uchar dat,char setx,char sety)
  3. {
  4.   uchar *i;
  5.   i=(moxing+((dat&0xf0)|((dat&0x0f)<<2)));
  6.   clear1(((((*i)&0xf0)>>4)+setx),(((*i)&0x0f)+sety));
  7.   clear1(((((*(i+1))&0xf0)>>4)+setx),(((*(i+1))&0x0f)+sety));
  8.   clear1(((((*(i+2))&0xf0)>>4)+setx),(((*(i+2))&0x0f)+sety));
  9.   clear1(((((*(i+3))&0xf0)>>4)+setx),(((*(i+3))&0x0f)+sety));  
  10. }
  11. /*俄罗斯方块子程序*/
  12. void fangkuai(void)
  13. {
  14.   uchar fenshu=0;
  15.   char offsety,offsetx;
  16.   char offsety_buff,offsetx_buff;
  17.   uchar buff=0x10;                 
  18.   bit ting=0;                                                               
  19.   uchar i;
  20.   //flag5=1;
  21.   TMOD=1;          //定时器工作方式
  22.   IT0=1;          //边延有效
  23.   IT1=1;
  24.   EA=1;                  //开CPU中断
  25.   ET0=1;          //开定时器中断
  26.   EX0=1;          //开外部中断
  27.   EX1=1;
  28.   TL0=0x00;
  29.   TH0=0x00;          //定时器初值
  30.   TR0=1;          //启动定时器
  31.   k=5;
  32.   choose12864(2);
  33.   clear12864();
  34.   play16(0,0,0,els);
  35.   play16(0,0,1,els+32);
  36.   play16(0,0,2,els+64);
  37.   play16(0,2,0,els+96);
  38.   play16(0,2,1,els+128);
  39.   play8(0,0,3,shu0);
  40.   play8(0,1,3,shu0);
  41.   vertical(1,60,30);
  42.   vertical(1,60,127);
  43.   for(i=0;i<98;i++)
  44.   {
  45.     dot(30+i,1);
  46.         dot(30+i,62);
  47.   }
  48.   offsety=7;
  49.   offsetx=-3;
  50.   for(;;)
  51. {
  52.    if(P3&0x04)
  53.    first=1;
  54.    if((k==0x02)&&((P3&0x04)==0x04))
  55.    {
  56.      offsety_buff=offsety;
  57.          ting=tingzhiyou(buff,offsetx,offsety);
  58.         if(!ting)
  59.          {
  60.           if(((*((moxing+((buff&0xf0)|((buff&0x0f)<<2)))+2))&0x0f)+offsety)
  61.       offsety--;
  62.           clearbuf(buff,offsetx_buff,offsety_buff);
  63.           playbuf(buff,offsetx,offsety);
  64.           offsety_buff=offsety;
  65.           
  66.     }
  67.           k=5;
  68.    }
  69.    if((k==0x01)&&((P3&0x04)==0x04))
  70.    {

  71.      offsety_buff=offsety;
  72.          ting=tingzhizuo(buff,offsetx,offsety);
  73.          if(!ting)
  74.         {
  75.          if(((*((moxing+((buff&0xf0)|((buff&0x0f)<<2)))+3))&0x0f)+offsety<=13)
  76.      offsety++;
  77.          k=5;
  78.          clearbuf(buff,offsetx_buff,offsety_buff);
  79.          playbuf(buff,offsetx,offsety);
  80.          offsety_buff=offsety;
  81.         }
  82.    }
  83.    if((k==0x03)&&((P3&0x04)==0x04))
  84.    {
  85.      dengji=36;/////////////
  86.          k=5;
  87.    }
  88.    if((k==0x00)&&((P3&0x04)==0x04))
  89.    {
  90.       uchar i;
  91.           k=5;
  92.           i=buff;
  93.           buff++;
  94.           if((buff&0x0f)>=4)
  95.           buff=buff&0xf0;
  96.           
  97.           //change1(0,14);
  98.       if(((*(((moxing+((buff&0xf0)|((buff&0x0f)<<2)))+3))&0x0f)+offsety)>14)
  99.        {
  100.              do
  101.                   {
  102.                           offsety--;
  103.                   }while((((*((moxing+((buff&0xf0)|((buff&0x0f)<<2)))+3))&0x0f)+offsety)>14);
  104.                  
  105.            }
  106.           if(((*((moxing+((buff&0xf0)|((buff&0x0f)<<2)))+2))&0x0f)+offsety<0)
  107.           {
  108.             do
  109.                 {
  110.                   offsety++;
  111.                 }while(((*((moxing+((buff&0xf0)|((buff&0x0f)<<2)))+2))&0x0f)+offsety);
  112.           }
  113.           clearbuf(i,offsetx_buff,offsety_buff);
  114.           playbuf(buff,offsetx,offsety);
  115.    }
  116.    ting=tingzhixia(buff,offsetx,offsety);
  117.    while(flag5);
  118.    if(flag1)
  119.    {
  120.      offsetx_buff=offsetx;
  121.          offsety_buff=offsety;
  122.      offsetx++;
  123.          clearbuf(buff,offsetx_buff,offsety_buff);
  124.          playbuf(buff,offsetx,offsety);
  125.      offsetx_buff=offsetx;
  126.          flag1=0;
  127.     }
  128.    if((((((*((moxing+((buff&0xf0)+((buff&0x0f)<<2))+1)))&0xf0)>>4)+offsetx)>22)|ting)
  129.    {
  130.     uchar i=0;
  131.         if(hangman((((*((moxing+((buff&0xf0)+((buff&0x0f)<<2))+1)))&0xf0)>>4)+offsetx))
  132.         {xiaohang((((*((moxing+((buff&0xf0)+((buff&0x0f)<<2))+1)))&0xf0)>>4)+offsetx);fenshu++;i++;}
  133.    
  134.         if((((*((moxing+((buff&0xf0)|((buff&0x0f)<<2)))+2))&0xf0)>>4)+offsetx>=(((*((moxing+((buff&0xf0)|((buff&0x0f)<<2)))+3))&0xf0)>>4)+offsetx)         //x2>=x3
  135.         {
  136.          if((((*((moxing+((buff&0xf0)|((buff&0x0f)<<2)))+2))&0xf0)>>4)+offsetx<(((*((moxing+((buff&0xf0)|((buff&0x0f)<<2))+1)))&0xf0)>>4)+offsetx)        //x2<x1
  137.          {
  138.            if(hangman((((*((moxing+((buff&0xf0)+((buff&0x0f)<<2))+2)))&0xf0)>>4)+offsetx+i))
  139.            {xiaohang((((*((moxing+((buff&0xf0)+((buff&0x0f)<<2))+2)))&0xf0)>>4)+offsetx+i);fenshu++;i++;}
  140.          }
  141.          if((((*((moxing+((buff&0xf0)|((buff&0x0f)<<2)))+3))&0xf0)>>4)+offsetx<(((*((moxing+((buff&0xf0)|((buff&0x0f)<<2)))+2))&0xf0)>>4)+offsetx)         //x3<x2
  142.           {
  143.            if(hangman((((*((moxing+((buff&0xf0)+((buff&0x0f)<<2))+3)))&0xf0)>>4)+offsetx+i))
  144.            {xiaohang((((*((moxing+((buff&0xf0)+((buff&0x0f)<<2))+3)))&0xf0)>>4)+offsetx+i);fenshu++;i++;}
  145.           }
  146.          if((((*(moxing+((buff&0xf0)|((buff&0x0f)<<2))))&0xf0)>>4)+offsetx<(((*((moxing+((buff&0xf0)|((buff&0x0f)<<2)))+3))&0xf0)>>4)+offsetx)         //x0<x3
  147.          {
  148.            if(hangman((((*(moxing+((buff&0xf0)+((buff&0x0f)<<2))))&0xf0)>>4)+offsetx+i))
  149.            {xiaohang((((*(moxing+((buff&0xf0)+((buff&0x0f)<<2))))&0xf0)>>4)+offsetx+i);fenshu++;i++;}
  150.          }
  151.         }
  152.         if((((*((moxing+((buff&0xf0)|((buff&0x0f)<<2)))+2))&0xf0)>>4)+offsetx<(((*((moxing+((buff&0xf0)|((buff&0x0f)<<2)))+3))&0xf0)>>4)+offsetx) //x2<x3
  153.         {
  154.            if((((*((moxing+((buff&0xf0)|((buff&0x0f)<<2)))+3))&0xf0)>>4)+offsetx<(((*((moxing+((buff&0xf0)|((buff&0x0f)<<2))+1)))&0xf0)>>4)+offsetx)
  155.            {
  156.              if(hangman((((*((moxing+((buff&0xf0)+((buff&0x0f)<<2))+3)))&0xf0)>>4)+offsetx+i))
  157.              {xiaohang((((*((moxing+((buff&0xf0)+((buff&0x0f)<<2))+3)))&0xf0)>>4)+offsetx+i);fenshu++;i++;}
  158.            }
  159.            if(hangman((((*((moxing+((buff&0xf0)+((buff&0x0f)<<2))+2)))&0xf0)>>4)+offsetx+i))
  160.            {xiaohang((((*((moxing+((buff&0xf0)+((buff&0x0f)<<2))+2)))&0xf0)>>4)+offsetx+i);fenshu++;i++;}
  161.            if((((*(moxing+((buff&0xf0)|((buff&0x0f)<<2))))&0xf0)>>4)+offsetx<(((*((moxing+((buff&0xf0)|((buff&0x0f)<<2)))+2))&0xf0)>>4)+offsetx)
  162.            {
  163.              if(hangman((((*(moxing+((buff&0xf0)+((buff&0x0f)<<2))))&0xf0)>>4)+offsetx+i))
  164.              {xiaohang((((*(moxing+((buff&0xf0)+((buff&0x0f)<<2))))&0xf0)>>4)+offsetx+i);fenshu++;i++;}
  165.            }
  166.         }
  167.          
  168.         play8(0,0,3,shu0+((fenshu/10)<<4));
  169.         play8(0,1,3,shu0+((fenshu%10)<<4));
  170.         dengji=fenshu/5;
  171.         if(((((*(moxing+((buff&0xf0)+((buff&0x0f)<<2))))&0xf0)>>4)+offsetx)<1)
  172.         {

  173.           delay1ms(450);
  174.       delay1ms(450);
  175.       choose12864(2);
  176.       clear12864();
  177.       play16(0,4,1,over);
  178.       play16(0,6,1,over+32);
  179.       play16(1,0,1,over+64);
  180.       play16(1,2,1,over+96);
  181.       delay1ms(450);
  182.       delay1ms(450);
  183.       break;
  184.         }       
  185.         buff=(((TL0%7)<<4)|(TH0%4));
  186.         //buff=0x11;
  187.     offsety=7;
  188.     offsetx=-3;
  189.         offsetx_buff=-9;
  190.         offsety_buff=-9;
  191.         }
  192. }

  193. }                                          
MJM_WSY 发表于 2016-1-24 12:39 | 显示全部楼层
12864的么?   有图片么?
mcu5i51 发表于 2016-1-24 15:38 | 显示全部楼层
建议LZ改下变量,标志的命名方式或习惯;
您需要登录后才可以回帖 登录 | 注册

本版积分规则

35

主题

235

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部