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