打印
[i.MX]

贪吃蛇游戏

[复制链接]
698|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 | 只看该作者
/*判断方块停止向下运动*/
bit tingzhixia(uchar buff,char offsetx,char offsety)
{
   char x0,y0,x1,y1,x2,y2,x3,y3;
   bit tz=0;
   x0=(((*(moxing+((buff&0xf0)|((buff&0x0f)<<2))))&0xf0)>>4)+offsetx;
   x1=(((*((moxing+((buff&0xf0)|((buff&0x0f)<<2))+1)))&0xf0)>>4)+offsetx;
   x2=(((*((moxing+((buff&0xf0)|((buff&0x0f)<<2)))+2))&0xf0)>>4)+offsetx;
   x3=(((*((moxing+((buff&0xf0)|((buff&0x0f)<<2)))+3))&0xf0)>>4)+offsetx;
   y2=((*((moxing+((buff&0xf0)|((buff&0x0f)<<2)))+2))&0x0f)+offsety;
   y3=((*((moxing+((buff&0xf0)|((buff&0x0f)<<2)))+3))&0x0f)+offsety;
   y0=((*(moxing+((buff&0xf0)|((buff&0x0f)<<2))))&0x0f)+offsety;
   y1=((*((moxing+((buff&0xf0)|((buff&0x0f)<<2)))+1))&0x0f)+offsety;
   
   if(readfk(x0+1,y0))
   {
      if(!((((x0+1)==x1)&&(y0==y1))|(((x0+1)==x2)&&(y0==y2))|(((x0+1)==x3)&&(y0==y3))))
         {
          tz=1;
          }
   }
    if(readfk(x1+1,y1))
   {
      if(!((((x1+1)==x0)&&(y1==y0))|(((x1+1)==x2)&&(y1==y2))|(((x1+1)==x3)&&(y1==y3))))
         {
          tz=1;
         }
   }
   if(readfk(x2+1,y2))
   {
      if(!((((x2+1)==x0)&&(y2==y0))|(((x2+1)==x1)&&(y2==y1))|(((x2+1)==x3)&&(y2==y3))))
          {
           tz=1;
          }
   }
   if(readfk(x3+1,y3))
   {
      if(!((((x3+1)==x0)&&(y3==y0))|(((x3+1)==x1)&&(y3==y1))|(((x3+1)==x2)&&(y3==y2))))
          {
           tz=1;
          }
   }
   return(tz);
}
/*判断一行是否可以消除*/
bit hangman(uchar x)
{
uchar i;
bit   man=1;
for(i=0;i<15;i++)
{
        man=man&(readfk(x,i));
        if(!man)
        break;
}
return(man);
}
/*消除一行*/
void xiaohang(uchar x)
{
  uchar i,j;
  for(i=0;i<15;i++)
  {
    clear1(x,i);
  }
  for(i=1;i<=x;i++)
  {
   for(j=0;j<15;j++)
   {
     if(readfk(x-i,j))
         {
          change1(x-i+1,j);
          clear1(x-i,j);
         }
   }
  }
}

使用特权

评论回复
板凳
neeringstu|  楼主 | 2016-1-23 20:46 | 只看该作者
/*判断是否停止向右*/
bit tingzhiyou(uchar buff,char offsetx,char offsety)
{
   char x0,y0,x1,y1,x2,y2,x3,y3;
   bit tz=0;
   x0=(((*(moxing+((buff&0xf0)|((buff&0x0f)<<2))))&0xf0)>>4)+offsetx;
   x1=(((*((moxing+((buff&0xf0)|((buff&0x0f)<<2))+1)))&0xf0)>>4)+offsetx;
   x2=(((*((moxing+((buff&0xf0)|((buff&0x0f)<<2)))+2))&0xf0)>>4)+offsetx;
   x3=(((*((moxing+((buff&0xf0)|((buff&0x0f)<<2)))+3))&0xf0)>>4)+offsetx;
   y2=((*((moxing+((buff&0xf0)|((buff&0x0f)<<2)))+2))&0x0f)+offsety;
   y3=((*((moxing+((buff&0xf0)|((buff&0x0f)<<2)))+3))&0x0f)+offsety;
   y0=((*(moxing+((buff&0xf0)|((buff&0x0f)<<2))))&0x0f)+offsety;
   y1=((*((moxing+((buff&0xf0)|((buff&0x0f)<<2)))+1))&0x0f)+offsety;
   if(readfk(x0,y0-1))
   {
      if(!(((x0==x1)&&((y0-1)==y1))|((x0==x2)&&((y0-1)==y2))|((x0==x3)&&((y0-1)==y3))))
         {
           tz=1;
          }
   }
   if(readfk(x1,y1-1))
     {
      if(!(((x1==x0)&&((y1-1)==y0))|((x1==x2)&&((y1-1)==y2))|((x1==x3)&&((y1-1)==y3))))
         {
          tz=1;          
         }
}
    if(readfk(x2,y2-1))
   {
      if(!(((x2==x0)&&((y2-1)==y0))|((x2==x1)&&((y2-1)==y1))|((x2==x3)&&((y2-1)==y3))))
          {
           tz=1;
          }
   }
      if(readfk(x3,y3-1))
   {
      if(!(((x3==x0)&&((y3-1)==y0))|((x3==x1)&&((y3-1)==y1))|((x3==x2)&&((y3-1)==y2))))
          {
           tz=1;
          }
   }
   return(tz);
}
/*判断是否停止向左*/
bit tingzhizuo(uchar buff,char offsetx,char offsety)
{
   char x0,y0,x1,y1,x2,y2,x3,y3;
   bit tz=0;
   x0=(((*(moxing+((buff&0xf0)|((buff&0x0f)<<2))))&0xf0)>>4)+offsetx;
   x1=(((*((moxing+((buff&0xf0)|((buff&0x0f)<<2))+1)))&0xf0)>>4)+offsetx;
   x2=(((*((moxing+((buff&0xf0)|((buff&0x0f)<<2)))+2))&0xf0)>>4)+offsetx;
   x3=(((*((moxing+((buff&0xf0)|((buff&0x0f)<<2)))+3))&0xf0)>>4)+offsetx;
   y2=((*((moxing+((buff&0xf0)|((buff&0x0f)<<2)))+2))&0x0f)+offsety;
   y3=((*((moxing+((buff&0xf0)|((buff&0x0f)<<2)))+3))&0x0f)+offsety;
   y0=((*(moxing+((buff&0xf0)|((buff&0x0f)<<2))))&0x0f)+offsety;
   y1=((*((moxing+((buff&0xf0)|((buff&0x0f)<<2)))+1))&0x0f)+offsety;
   if(readfk(x0,y0+1))
   {
      if(!(((x0==x1)&&((y0+1)==y1))|((x0==x2)&&((y0+1)==y2))|((x0==x3)&&((y0+1)==y3))))
         {
           tz=1;
          }
   }
   if(readfk(x1,y1+1))
     {
      if(!(((x1==x0)&&((y1+1)==y0))|((x1==x2)&&((y1+1)==y2))|((x1==x3)&&((y1+1)==y3))))
         {
          tz=1;          
         }
}
    if(readfk(x2,y2+1))
   {
      if(!(((x2==x0)&&((y2+1)==y0))|((x2==x1)&&((y2+1)==y1))|((x2==x3)&&((y2+1)==y3))))
          {
           tz=1;
          }
   }
      if(readfk(x3,y3+1))
   {
      if(!(((x3==x0)&&((y3+1)==y0))|((x3==x1)&&((y3+1)==y1))|((x3==x2)&&((y3+1)==y2))))
          {
           tz=1;
          }
   }
   return(tz);
}

使用特权

评论回复
地板
neeringstu|  楼主 | 2016-1-23 20:48 | 只看该作者
/*清除一个方块*/
void clearbuf(uchar dat,char setx,char sety)
{
  uchar *i;
  i=(moxing+((dat&0xf0)|((dat&0x0f)<<2)));
  clear1(((((*i)&0xf0)>>4)+setx),(((*i)&0x0f)+sety));
  clear1(((((*(i+1))&0xf0)>>4)+setx),(((*(i+1))&0x0f)+sety));
  clear1(((((*(i+2))&0xf0)>>4)+setx),(((*(i+2))&0x0f)+sety));
  clear1(((((*(i+3))&0xf0)>>4)+setx),(((*(i+3))&0x0f)+sety));  
}
/*俄罗斯方块子程序*/
void fangkuai(void)
{
  uchar fenshu=0;
  char offsety,offsetx;
  char offsety_buff,offsetx_buff;
  uchar buff=0x10;                 
  bit ting=0;                                                               
  uchar i;
  //flag5=1;
  TMOD=1;          //定时器工作方式
  IT0=1;          //边延有效
  IT1=1;
  EA=1;                  //开CPU中断
  ET0=1;          //开定时器中断
  EX0=1;          //开外部中断
  EX1=1;
  TL0=0x00;
  TH0=0x00;          //定时器初值
  TR0=1;          //启动定时器
  k=5;
  choose12864(2);
  clear12864();
  play16(0,0,0,els);
  play16(0,0,1,els+32);
  play16(0,0,2,els+64);
  play16(0,2,0,els+96);
  play16(0,2,1,els+128);
  play8(0,0,3,shu0);
  play8(0,1,3,shu0);
  vertical(1,60,30);
  vertical(1,60,127);
  for(i=0;i<98;i++)
  {
    dot(30+i,1);
        dot(30+i,62);
  }
  offsety=7;
  offsetx=-3;
  for(;;)
{
   if(P3&0x04)
   first=1;
   if((k==0x02)&&((P3&0x04)==0x04))
   {
     offsety_buff=offsety;
         ting=tingzhiyou(buff,offsetx,offsety);
        if(!ting)
         {
          if(((*((moxing+((buff&0xf0)|((buff&0x0f)<<2)))+2))&0x0f)+offsety)
      offsety--;
          clearbuf(buff,offsetx_buff,offsety_buff);
          playbuf(buff,offsetx,offsety);
          offsety_buff=offsety;
          
    }
          k=5;
   }
   if((k==0x01)&&((P3&0x04)==0x04))
   {

     offsety_buff=offsety;
         ting=tingzhizuo(buff,offsetx,offsety);
         if(!ting)
        {
         if(((*((moxing+((buff&0xf0)|((buff&0x0f)<<2)))+3))&0x0f)+offsety<=13)
     offsety++;
         k=5;
         clearbuf(buff,offsetx_buff,offsety_buff);
         playbuf(buff,offsetx,offsety);
         offsety_buff=offsety;
        }
   }
   if((k==0x03)&&((P3&0x04)==0x04))
   {
     dengji=36;/////////////
         k=5;
   }
   if((k==0x00)&&((P3&0x04)==0x04))
   {
      uchar i;
          k=5;
          i=buff;
          buff++;
          if((buff&0x0f)>=4)
          buff=buff&0xf0;
          
          //change1(0,14);
      if(((*(((moxing+((buff&0xf0)|((buff&0x0f)<<2)))+3))&0x0f)+offsety)>14)
       {
             do
                  {
                          offsety--;
                  }while((((*((moxing+((buff&0xf0)|((buff&0x0f)<<2)))+3))&0x0f)+offsety)>14);
                 
           }
          if(((*((moxing+((buff&0xf0)|((buff&0x0f)<<2)))+2))&0x0f)+offsety<0)
          {
            do
                {
                  offsety++;
                }while(((*((moxing+((buff&0xf0)|((buff&0x0f)<<2)))+2))&0x0f)+offsety);
          }
          clearbuf(i,offsetx_buff,offsety_buff);
          playbuf(buff,offsetx,offsety);
   }
   ting=tingzhixia(buff,offsetx,offsety);
   while(flag5);
   if(flag1)
   {
     offsetx_buff=offsetx;
         offsety_buff=offsety;
     offsetx++;
         clearbuf(buff,offsetx_buff,offsety_buff);
         playbuf(buff,offsetx,offsety);
     offsetx_buff=offsetx;
         flag1=0;
    }
   if((((((*((moxing+((buff&0xf0)+((buff&0x0f)<<2))+1)))&0xf0)>>4)+offsetx)>22)|ting)
   {
    uchar i=0;
        if(hangman((((*((moxing+((buff&0xf0)+((buff&0x0f)<<2))+1)))&0xf0)>>4)+offsetx))
        {xiaohang((((*((moxing+((buff&0xf0)+((buff&0x0f)<<2))+1)))&0xf0)>>4)+offsetx);fenshu++;i++;}
   
        if((((*((moxing+((buff&0xf0)|((buff&0x0f)<<2)))+2))&0xf0)>>4)+offsetx>=(((*((moxing+((buff&0xf0)|((buff&0x0f)<<2)))+3))&0xf0)>>4)+offsetx)         //x2>=x3
        {
         if((((*((moxing+((buff&0xf0)|((buff&0x0f)<<2)))+2))&0xf0)>>4)+offsetx<(((*((moxing+((buff&0xf0)|((buff&0x0f)<<2))+1)))&0xf0)>>4)+offsetx)        //x2<x1
         {
           if(hangman((((*((moxing+((buff&0xf0)+((buff&0x0f)<<2))+2)))&0xf0)>>4)+offsetx+i))
           {xiaohang((((*((moxing+((buff&0xf0)+((buff&0x0f)<<2))+2)))&0xf0)>>4)+offsetx+i);fenshu++;i++;}
         }
         if((((*((moxing+((buff&0xf0)|((buff&0x0f)<<2)))+3))&0xf0)>>4)+offsetx<(((*((moxing+((buff&0xf0)|((buff&0x0f)<<2)))+2))&0xf0)>>4)+offsetx)         //x3<x2
          {
           if(hangman((((*((moxing+((buff&0xf0)+((buff&0x0f)<<2))+3)))&0xf0)>>4)+offsetx+i))
           {xiaohang((((*((moxing+((buff&0xf0)+((buff&0x0f)<<2))+3)))&0xf0)>>4)+offsetx+i);fenshu++;i++;}
          }
         if((((*(moxing+((buff&0xf0)|((buff&0x0f)<<2))))&0xf0)>>4)+offsetx<(((*((moxing+((buff&0xf0)|((buff&0x0f)<<2)))+3))&0xf0)>>4)+offsetx)         //x0<x3
         {
           if(hangman((((*(moxing+((buff&0xf0)+((buff&0x0f)<<2))))&0xf0)>>4)+offsetx+i))
           {xiaohang((((*(moxing+((buff&0xf0)+((buff&0x0f)<<2))))&0xf0)>>4)+offsetx+i);fenshu++;i++;}
         }
        }
        if((((*((moxing+((buff&0xf0)|((buff&0x0f)<<2)))+2))&0xf0)>>4)+offsetx<(((*((moxing+((buff&0xf0)|((buff&0x0f)<<2)))+3))&0xf0)>>4)+offsetx) //x2<x3
        {
           if((((*((moxing+((buff&0xf0)|((buff&0x0f)<<2)))+3))&0xf0)>>4)+offsetx<(((*((moxing+((buff&0xf0)|((buff&0x0f)<<2))+1)))&0xf0)>>4)+offsetx)
           {
             if(hangman((((*((moxing+((buff&0xf0)+((buff&0x0f)<<2))+3)))&0xf0)>>4)+offsetx+i))
             {xiaohang((((*((moxing+((buff&0xf0)+((buff&0x0f)<<2))+3)))&0xf0)>>4)+offsetx+i);fenshu++;i++;}
           }
           if(hangman((((*((moxing+((buff&0xf0)+((buff&0x0f)<<2))+2)))&0xf0)>>4)+offsetx+i))
           {xiaohang((((*((moxing+((buff&0xf0)+((buff&0x0f)<<2))+2)))&0xf0)>>4)+offsetx+i);fenshu++;i++;}
           if((((*(moxing+((buff&0xf0)|((buff&0x0f)<<2))))&0xf0)>>4)+offsetx<(((*((moxing+((buff&0xf0)|((buff&0x0f)<<2)))+2))&0xf0)>>4)+offsetx)
           {
             if(hangman((((*(moxing+((buff&0xf0)+((buff&0x0f)<<2))))&0xf0)>>4)+offsetx+i))
             {xiaohang((((*(moxing+((buff&0xf0)+((buff&0x0f)<<2))))&0xf0)>>4)+offsetx+i);fenshu++;i++;}
           }
        }
         
        play8(0,0,3,shu0+((fenshu/10)<<4));
        play8(0,1,3,shu0+((fenshu%10)<<4));
        dengji=fenshu/5;
        if(((((*(moxing+((buff&0xf0)+((buff&0x0f)<<2))))&0xf0)>>4)+offsetx)<1)
        {

          delay1ms(450);
      delay1ms(450);
      choose12864(2);
      clear12864();
      play16(0,4,1,over);
      play16(0,6,1,over+32);
      play16(1,0,1,over+64);
      play16(1,2,1,over+96);
      delay1ms(450);
      delay1ms(450);
      break;
        }       
        buff=(((TL0%7)<<4)|(TH0%4));
        //buff=0x11;
    offsety=7;
    offsetx=-3;
        offsetx_buff=-9;
        offsety_buff=-9;
        }
}

}                                          

使用特权

评论回复
5
MJM_WSY| | 2016-1-24 12:39 | 只看该作者
12864的么?   有图片么?

使用特权

评论回复
6
mcu5i51| | 2016-1-24 15:38 | 只看该作者
建议LZ改下变量,标志的命名方式或习惯;

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

35

主题

235

帖子

0

粉丝