📄 my design__shotgame.c
字号:
/****************************************************************************/
/* key0:射击瞄准键+复位键+模式选择键 */
/* key1:射击键+模式选择确定键 */
/* PAUSE:暂停键+继续键 */
/****************************************************************************/
#include<regx51.h>
#include<stdlib.h>
#include<absacc.h>
unsigned char i;
unsigned char times; //计数定时器溢出次数
unsigned char gunPosition; //枪的模式
unsigned char xintPosition; //随机数组的第几个数
unsigned int speed; //数字前进的速度
unsigned char speed1; //数字前进的速度的高8位
unsigned char speed2; //数字前进的速度的低8位
bit speedce; //速度改变允许位
unsigned char speedmode; //速度的模式,分为1~8八个等级
unsigned int kill_enemy; //杀死的敌军数量
unsigned char code LEDMAP[] = //共阴极代码
{
0x3f, 0x06, 0x5b, 0x4f, 0x66,
0x6d, 0x7d, 0x07, 0x7f, 0x6f, 0x00
};
unsigned char code gun[]=
{
0x01, 0x20, 0x40, 0x10, 0x08, 0x00
};
unsigned char random[]= //从第二个LED向右显示
{
0, 0, 0, 0, 0, 0, 0
};
show(unsigned char a,unsigned char b)
{
/*
P8255A = a;
P8255B = b; */
unsigned int c;
XBYTE[0] = 0;
c = (int)b<<8;
XBYTE[c] = a;
for(i=0;i<50;i++);
}
showall()
{
show(gun[gunPosition],128);
show(random[0],64);
show(random[1],32);
show(random[2],16);
show(random[3],8);
show(random[4],4);
show(random[5],2);
show(random[6],1);
}
pause()
{
IE = 0x00;
for(;P1_7;);
for(;!P1_7;) showall();
for(;P1_7;);
TL0 = speed1;
TH0 = speed2;
IE = 0x87;
}
gameOver()
{
IE = 0x00;
gunPosition = 5;
random[0] = 0;
random[1] = 0;
random[2] = 0;
random[3] = LEDMAP[kill_enemy/1000];
kill_enemy %= 1000;
random[4] = LEDMAP[kill_enemy/100];
kill_enemy %= 100;
random[5] = LEDMAP[kill_enemy/10];
random[6] = LEDMAP[kill_enemy%10];
while(1) showall();
// IE = 0x87;
// goto l1;
}
xint0() interrupt 0
{
if(speedce){
speedmode ++;
if(speedmode == 8) speedmode = 1;
}
else{
gunPosition ++;
if(gunPosition == 5) gunPosition = 0;
xintPosition = 0;
}
}
xint1() interrupt 2
{
if(speedce)
speedce = 0;
else{
a1: switch(gunPosition){
case 2:
if(random[xintPosition] & gun[gunPosition]){
random[xintPosition]&=(~(gun[gunPosition]));
if(!(random[xintPosition] & 0x04)) xintPosition ++;
kill_enemy ++;
}
else if(random[xintPosition] & 0x04){
random[xintPosition]&=(~0x04);
xintPosition ++;
kill_enemy ++;
}
else goto c1;
break;
case 3:
if(random[xintPosition] & gun[gunPosition]){
random[xintPosition]&=(~(gun[gunPosition]));
if(!(random[xintPosition] & 0x02)) xintPosition ++;
kill_enemy ++;
}
else if(random[xintPosition] & 0x02){
random[xintPosition]&=(~0x02);
xintPosition ++;
kill_enemy ++;
}
else goto c1;
break;
default:
if(random[xintPosition] & gun[gunPosition]){
random[xintPosition]&=(~(gun[gunPosition]));
xintPosition ++;
kill_enemy ++;
}
else{
c1: xintPosition ++;
if(xintPosition == 7) goto b1;
goto a1;
}
break;
}
b1: if(xintPosition == 7) xintPosition = 0;
}
}
timer0() interrupt 1
{
times ++;
if(times == 20){
times = 0;
if(random[0]) gameOver();
for(i=0;i<6;i++) random[i] = random[i+1];
random[6] = rand();
random[6] &= 0x7f;
if(xintPosition) xintPosition--;
}
TL0 = speed1;
TH0 = speed2;
}
main()
{
gunPosition = 0;
xintPosition = 0;
times = 0;
speedce = 1;
speedmode = 1;
kill_enemy = 0;
P1 = 0;
P2 = 0;
IE = 0x87; //中断开关开
TCON = 0x05;
IP = 0x02;
for(;speedce;) show(LEDMAP[speedmode],1);
speed = 65535-5000*(13-speedmode);
TMOD = 0x01;
speed1 = speed%256;
speed2 = speed/256;
TL0 = speed1;
TH0 = speed2;
TCON = 0x15;
while(1){
if(P1_7) pause();
showall();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -