⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 my design__shotgame.c

📁 一个基于51单片机的小游戏
💻 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 + -