/*清除一个方块*/
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;
}
}
}