?? game.c
字號:
#include <REGX51.H>
#define K0 0 //
#define K1 1 //
#define K2 2 //
#define K3 3 //
#define K4 4 //
#define A 0x01 //
#define B 0x02 //
#define C 0x04 //
#define D 0x08 //
#define E 0x10 //
#define F 0x20 //
#define G 0x40 //
#define Key0 0x01 //+
#define Key1 0x02 //-
#define Key2 0x04 //shoot
unsigned char r,i,outbit,flag,j,k,key;
char con;
unsigned int t,m;
unsigned int buf[5];
unsigned char ledbuf[8];
unsigned char code ledmap[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00};
unsigned char code rand[]={ 0,1,0,0,1,0,0,1,0 };
delay1ms()
{
unsigned char i;
for(i = 250; i > 0; i--);
for(i = 247; i > 0; i--);
}
display()
{
unsigned char i;
if(con==0) ledbuf[7]=A;
if(con==1) ledbuf[7]=F;
if(con==2) ledbuf[7]=G;
if(con==3) ledbuf[7]=E;
if(con==4) ledbuf[7]=D;
if(flag==1) ledbuf[7]=ledmap[10];
outbit = 0x01; // 從右邊開始顯示
for (i = 0; i < 8; i++)
{
P0 = ledbuf[i];
P2 = ~outbit;
delay1ms();
outbit <<= 1; // 顯示下一位
P2= 0xff; //關所有LED
}
}
unsigned char testKey()
{
return(~P1 & 0x0f);
}
unsigned char getkey()
{
unsigned char keyNO;
if(testKey())
{
display();
display();
if(testKey())
{
keyNO=(~P1 & 0x0f);
while(testKey()) display();
return(keyNO);
}
}
else
display();
}
gameover()
{
TR0=0;
ledbuf[0] = ledmap[m%10];
ledbuf[1] = ledmap[m/10%10];
ledbuf[2] = ledmap[m/100%10];
ledbuf[3] = ledmap[m/1000%10];
ledbuf[4] = ledmap[10];
ledbuf[5] = ledmap[10];
ledbuf[6] = ledmap[10];
ledbuf[7] = ledmap[10];
flag=1;
}
Time1s() interrupt 1
{
t++;j++;
if(t==6000) //1.5 S
{
t=0;
for(i=0;i<5;i++)
{
buf[i]<<=1;
buf[i]+=rand[r];
r++;
if(r==9) r=0;
}
}
if(t==100)
{
j=0;
if( buf[0]>=0x80 || buf[1]>=0x8000 || buf[2]>=0x80 || buf[3]>=0x8000 || buf[4]>=0x80 )
gameover();
else
{
for(i=0;i<7;i++)
{
ledbuf[i]=0;
}
for(i=0;i<8;i++)
{
outbit = 0x01;
if( (outbit<<i) & buf[0] ) ledbuf[i]+=A;
if( (outbit<<i) & buf[2] ) ledbuf[i]+=G;
if( (outbit<<i) & buf[4] ) ledbuf[i]+=D;
}
for(i=0,k=0;i<16;i++,k++)
{
outbit = 0x01;
if( (outbit<<i) & buf[1] ) ledbuf[k]+=B;
if( (outbit<<i) & buf[3] ) ledbuf[k]+=C;
i++;
if( (outbit<<i) & buf[1] ) ledbuf[k]+=F;
if( (outbit<<i) & buf[3] ) ledbuf[k]+=E;
}
}
}
}
main()
{
P0=0xff;
P2=0x00; //開始時讓所有數碼管全亮
IE=0x82;
TMOD=0x02;
TH0=TL0=256-250;
TR0=1;
while(1)
{
if(flag==1) break;
key=getkey();
if(key==Key0) { con--;if(con==-1)con=4; }
if(key==Key1) { con++;if(con==5) con=0; }
if(key==Key2)
switch(con)
{
case K0: if(buf[0]>=0x80) buf[0]-=0x80;
else if(buf[0]>=0x40) buf[0]-=0x40;
else if(buf[0]>=0x20) buf[0]-=0x20;
else if(buf[0]>=0x10) buf[0]-=0x10;
else if(buf[0]>=0x08) buf[0]-=0x08;
else if(buf[0]>=0x04) buf[0]-=0x04;
else if(buf[0]>=0x02) buf[0]-=0x02;
else if(buf[0]>=0x01) buf[0]-=0x01;
m++;
break;
case K1: if(buf[1]>=0x8000) buf[1]-=0x8000;
else if(buf[1]>=0x4000) buf[1]-=0x4000;
else if(buf[1]>=0x2000) buf[1]-=0x2000;
else if(buf[1]>=0x1000) buf[1]-=0x1000;
else if(buf[1]>=0x0800) buf[1]-=0x0800;
else if(buf[1]>=0x0400) buf[1]-=0x0400;
else if(buf[1]>=0x0200) buf[1]-=0x0200;
else if(buf[1]>=0x0100) buf[1]-=0x0100;
else if(buf[1]>=0x80) buf[1]-=0x80;
else if(buf[1]>=0x40) buf[1]-=0x40;
else if(buf[1]>=0x20) buf[1]-=0x20;
else if(buf[1]>=0x10) buf[1]-=0x10;
else if(buf[1]>=0x08) buf[1]-=0x08;
else if(buf[1]>=0x04) buf[1]-=0x04;
else if(buf[1]>=0x02) buf[1]-=0x02;
else if(buf[1]>=0x01) buf[1]-=0x01;
m++;
break;
case K2: if(buf[2]>=0x80) buf[2]-=0x80;
else if(buf[2]>=0x40) buf[2]-=0x40;
else if(buf[2]>=0x20) buf[2]-=0x20;
else if(buf[2]>=0x10) buf[2]-=0x10;
else if(buf[2]>=0x08) buf[2]-=0x08;
else if(buf[2]>=0x04) buf[2]-=0x04;
else if(buf[2]>=0x02) buf[2]-=0x02;
else if(buf[2]>=0x01) buf[2]-=0x01;
m++;
break;
case K3: if(buf[3]>=0x8000) buf[3]-=0x8000;
else if(buf[3]>=0x4000) buf[3]-=0x4000;
else if(buf[3]>=0x2000) buf[3]-=0x2000;
else if(buf[3]>=0x1000) buf[3]-=0x1000;
else if(buf[3]>=0x0800) buf[3]-=0x0800;
else if(buf[3]>=0x0400) buf[3]-=0x0400;
else if(buf[3]>=0x0200) buf[3]-=0x0200;
else if(buf[3]>=0x0100) buf[3]-=0x0100;
else if(buf[3]>=0x80) buf[3]-=0x80;
else if(buf[3]>=0x40) buf[3]-=0x40;
else if(buf[3]>=0x20) buf[3]-=0x20;
else if(buf[3]>=0x10) buf[3]-=0x10;
else if(buf[3]>=0x08) buf[3]-=0x08;
else if(buf[3]>=0x04) buf[3]-=0x04;
else if(buf[3]>=0x02) buf[3]-=0x02;
else if(buf[3]>=0x01) buf[3]-=0x01;
m++;
break;
case K4: if(buf[4]>=0x80) buf[4]-=0x80;
else if(buf[4]>=0x40) buf[4]-=0x40;
else if(buf[4]>=0x20) buf[4]-=0x20;
else if(buf[4]>=0x10) buf[4]-=0x10;
else if(buf[4]>=0x08) buf[4]-=0x08;
else if(buf[4]>=0x04) buf[4]-=0x04;
else if(buf[4]>=0x02) buf[4]-=0x02;
else if(buf[4]>=0x01) buf[4]-=0x01;
m++;
break;
default: break;
}
display();
}
while(1) display();
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -