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

📄 game.c

📁 我学生实习时写的射击游戏程序。该程序在他自己做的板子上演示效果很好。程序我没有仔细检查
💻 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 + -