📄 main.c
字号:
*(p+3)=64;
*(p+4)=0x88;
*(p+5)=0xff;
p=p+6;
for(i=0;i<4;i++)
{
for(temp1=0;temp1<16;temp1++)
{
for(temp2=0;temp2<w;temp2++)
for(temp3=0;temp3<2;temp3++)
{
if(cut_pix[i][temp2])
*p=els[temp1][temp3];
else
*p=0x00;
p++;
}
}
}
}
void make_els_all(void)//将方块的占用映射形式(21*14)变为去图实际象素BMP形式
{
uchar i=0;
uchar j=0;
uchar temp1=0;
uchar temp2=0;
uchar temp3=0;
uchar k=0;
xdata uchar *p;
uint m=0;
p=ext_all;
*p=0x00;
*(p+1)=224;
*(p+2)=272/256;
*(p+3)=272%256;
*(p+4)=0x88;
*(p+5)=0xff;
p=p+6;
for(i=4;i<21;i++)
{
for(temp1=0;temp1<16;temp1++)
{
for(temp2=0;temp2<14;temp2++)
for(temp3=0;temp3<2;temp3++)
{
if(ext_els[temp2][i])
*p=els[temp1][temp3];
else
*p=0x00;
p++;
}
}
}
}
void make_els_ini(uchar k)//显示指定行数的方块,在方块刚下来的时候显示使用。
{
uint i=0;
uint h=0;
uchar *p;
uchar *t;
uchar w;
w=with();
if(k>4)
k=4;
t=els_16_t;
*t=0x00;
*(t+1)=w*16;
*(t+2)=0;
*(t+3)=k*16;
*(t+4)=0x88;
*(t+5)=0xff;
t=t+6;
p=(els_16_r+6+(4-k)*w*2*16);
for(i=0;i<(k*w*2*16);i++)
{
*t=*p;
t++;
p++;
}
}
void make_els_ini_left(uchar k)//显示指定行数的方块,在方块刚下来的时候显示使用。左移时候调用。制作映射数组
{
uint i=0;
uint h=0;
uchar *p;
uchar *t;
uchar w;
w=with();
if(k>4)
k=4;
if((abs_x+5)>14)
{
w=(abs_x+5)-14;
t=els_16_t;
*t=0x00;
*(t+1)=64-w*16;
*(t+2)=0;
*(t+3)=k*16;
*(t+4)=0x88;
*(t+5)=0xff;
t=t+6;
p=(els_16_r+6+(4-k)*(4-w)*2*16);
for(i=0;i<(k*(4-w)*2*16);i++)
{
*t=*p;
t++;
p++;
}
}
else
{
t=els_16_t;
*t=0x00;
*(t+1)=64;
*(t+2)=0;
*(t+3)=k*16;
*(t+4)=0x88;
*(t+5)=0xff;
t=t+6;
p=(els_16_r+6+(4-k)*8*16);
for(i=0;i<(k*8*16);i++)
{
*t=*p;
t++;
p++;
}
}
}//显示指定行数的方块,在方块刚下来的时候显示使用。左移时候调用。显示实际象素
void make_els_cut_left(void)
{
uchar i=0;
uchar j=0;
uchar w=0;
uchar temp1=0;
uchar temp2=0;
uchar temp3=0;
uchar k=0;
uchar *p;
uint m=0;
p=els_16_r;
*p=0x00;
*(p+1)=64;
*(p+2)=0x00;
*(p+3)=64;
*(p+4)=0x88;
*(p+5)=0xff;
if((abs_x+5)>14)
{
p=els_16_r;
*p=0x00;
*(p+1)=64;
*(p+2)=0x00;
*(p+3)=64;
*(p+4)=0x88;
*(p+5)=0xff;
w=(abs_x+5)-14;
*(p+1)=64-w*16;
p=p+6;
for(i=0;i<4;i++)
{
for(temp1=0;temp1<16;temp1++)
{
for(temp2=0;temp2<(4-w);temp2++)
for(temp3=0;temp3<2;temp3++)
{
if(cut_pix[i][temp2])
*p=els[temp1][temp3];
else
*p=0x00;
p++;
}
}
}
}
else
{
p=p+6;
for(i=0;i<4;i++)
{
for(temp1=0;temp1<16;temp1++)
{
for(temp2=0;temp2<4;temp2++)
for(temp3=0;temp3<2;temp3++)
{
if(cut_pix[i][temp2])
*p=els[temp1][temp3];
else
*p=0x00;
p++;
}
}
}
}
}
/********************************************************************
函 数 名:ini_int()
功 能: 定时器 和中断初始化
说 明:
调 用: main()
入口参数:无
返 回 值:无
设 计:志博51 AVR PIC 开发板 日 期:2007年11月13日
变 更 日 期:
变 更 备 注:
***********************************************************************/
void ini_int(void)
{
EA=0;
EX0=0;
ET1=0;
EX1=0;
ET0=1;
PT1=0;
PT0=1;
PX1=1;
PX0=0;
IT0=1;
TMOD=0X01;
TH0=0X00;
TL0=0X01;
TR0=1;
EA=1;
}
xdata uchar delay_1s=0; //连按时间存放
xdata uchar have_down=0; //有下降按件按下
xdata uchar key=0;
xdata uchar oldkey=0; //上次按件号
xdata uchar newkey=0; //本次按件号
xdata uchar eq_time=0;
xdata uchar eq_key_lab=0; //连按标志
/********************************************************************
函 数 名:time_int()
功 能:系统定时和按件处理
说 明:
调 用:
入口参数:无
返 回 值:无
设 计:志博51 AVR PIC 开发板 日 期:2007年11月13日
变 更 日 期:
变 更 备 注:
***********************************************************************/
void time_int()interrupt 1
{
uchar a=0;
uchar b=0;
uchar c=0;
uchar d=0;
uchar e=0;
uchar f=0;
uchar j=0;
uchar k=0;
uchar m=0;
TH0=0X00;
TL0=0X00;
//定时一秒
if(delay_1s>30)
{
have_down=1;
delay_1s=0;
newkey=5; //每隔0。5秒 方块自动下降
}
else
delay_1s++;//以上语句为方块自动下降的处理
P1=0XF0;
a=(0x01);
m=P1;
if(!(P1==0xf0))
{
for(c=0;c<3;c++)
{
k=~a;
b=(0xff&k);
P1=b;
d=(P1>>4);
a=(a<<1);
if(d!=0x0f)
for(e=0;e<4;e++)
{
d=d>>e;
if(!(d&0x01))
{
key=(c*4)+e+1;
goto test_eq;
}
else
key=0;
}
}
}
else
key=0;
test_eq:
if((key!=0))
{
oldkey=key;
key=0;
if(eq_time<60)
eq_time++;
else
{
eq_time=70;
eq_key_lab=0xff;
}
}
else if((oldkey!=0)&&(key==0))
{
newkey=oldkey;
eq_time=0;
oldkey=0;
eq_key_lab=0x00;
}//以上语句为按件处理 单次按下 和连按分析
}
/********************************************************************
函 数 名:draw_meun()
功 能:画简单的菜单
说 明:调用画图函数和写字符函数 目前工作在小图象缓冲模式 点亮分辨率:352*288 点
调 用:main() 每次游戏开始调用
入口参数:无
返 回 值:无
设 计:志博51 AVR PIC 开发板 日 期:2007年11月13日
变 更 日 期:
变 更 备 注:
***********************************************************************/
void draw_meun(void) //画简单的菜单
{
clean_rec(0,0,352,288,0xff,0x04); //清全屏
display_char(270,30,zifu,0xff,0x12);
display_dig(score,270,50,0xff,0x23);
display_char(240,260,qq,0xff,0x32);
display_char(240,240,http,0xff,0x32);
draw_bmp(244,200,qq_ico,bmp_256); //DRAW QQ ICO
clean_rec(0,0,352,8,0x45,1); //画上边
clean_rec(0,280,352,8,0x45,1); //画下边
clean_rec(0,0,10,288,0x45,1); //画左间
clean_rec(347,0,5,288,0x45,1); //画右间
clean_rec(234,0,5,288,0x45,1); //画中间
clean_rec(234,90,113,5,0x45,1);
display_char(240,110,mcu,0xff,0x32);
display_char(240,126,frq,0xff,0x32);
display_char(240,142,ram,0xff,0x32);
display_char(240,158,rom,0xff,0x32);
clean_rec(234,180,113,5,0x45,1);
}
/********************************************************************
函 数 名:down()
功 能:方块下降处理
说 明:下降处理,每次绝对坐标ABS——Y加一,先清上次方块,再画现在方块,并且分为方块是否露出完处理
调 用:main() 每次分析完下降可能性后调用
入口参数:无
返 回 值:无
设 计:志博51 AVR PIC 开发板 日 期:2007年11月13日
变 更 日 期:
变 更 备 注:
***********************************************************************/
void down(void)
{
if(abs_y>3)
{
if(abs_y!=0)
{
down_lab=1;
cut_p(abs_x,(abs_y));
make_els_cut();
draw_bmp(10+(abs_x*16),8+((abs_y-4)*16),els_16_r,bmp_2);
}
abs_y=abs_y+1;
cut_p(abs_x,abs_y);
un_pix();
make_els_cut();
draw_bmp(10+(abs_x*16),8+((abs_y-4)*16),els_16_r,bmp_2);
}
else
{
abs_y=abs_y+1;
cut_p(abs_x,abs_y);
un_pix();
make_els_cut();
make_els_ini(abs_y);
draw_bmp(10+(abs_x*16),8,els_16_t,bmp_2);
}
}
/********************************************************************
函 数 名:right()
功 能:方块右移处理
说 明:右移处理,每次绝对坐标ABS—X加一,先清上次方块,再画现在方块,并且分为方块是否露出完处理
调 用:main() 每次分析完下降可能性后调用
入口参数:无
返 回 值:无
设 计:志博51 AVR PIC 开发板 日 期:2007年11月13日
变 更 日 期:
变 更 备 注:
***********************************************************************/
void right(void)
{
abs_x++;
if(abs_y>3)
{
if(abs_y!=0)
{
cut_p((abs_x-1),(abs_y));
make_els_cut();
draw_bmp(10+((abs_x-1)*16),8+((abs_y-4)*16),els_16_r,bmp_2);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -