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

📄 tanshishe.c

📁 自制的贪食蛇游戏机的程序
💻 C
字号:
#include "reg52.h"
#include <stdlib.h> 

//11111111111111111111111111111111111111111111111111111111
sbit p10=P1^0;
sbit p11=P1^1;
sbit p12=P1^2;
sbit p13=P1^3;
sbit p14=P1^4;
sbit p15=P1^5;
sbit p16=P1^6;
sbit p17=P1^7;

sbit p20=P2^0;
sbit p21=P2^1;
sbit p22=P2^2;
sbit p23=P2^3;
sbit p24=P2^4;
sbit p25=P2^5;
sbit p26=P2^6;
sbit p27=P2^7;

sbit p30=P3^0;
sbit p31=P3^1;
sbit p32=P3^2;
sbit p33=P3^3;
sbit p34=P3^4;
sbit p35=P3^5;
//2222222222222222222222222222222222222222222222222222222222
unsigned int i;
int count=3;
unsigned char currentline=3,currentcol=3,currentoffset=3,temp2=0,timewatcher=1,objectl,objectc,offset=3,speed=5,j,k,tempspeed,tempmusic=1,high=0,low=0;//,pan,temp=0;
idata unsigned char b[128]; 

void play(int i,int j);
void playarray(int count,unsigned char b[]);
void move(int count,unsigned char b[]);
int exist(unsigned char line,unsigned char col,int counter, unsigned char b[]);
void display(unsigned char score);
//void timer1 (void) interrupt 3{
//temp++;
//if(temp>=4){pan=0;TR1=0;temp=0;}}

void music(unsigned char rhythm);

void timer0 (void) interrupt 1{
temp2++;
if(temp2>=speed){timewatcher=0;TR0=0;temp2=0;}}


void timer1 (void) interrupt 3
{
	p35=~p35;
	TH1=high;TL1=low;
	tempmusic++;
	if(tempmusic>=500)
		tempmusic=0;
}

//33333333333333333333333333333333333333333333333333333333333

void main()
{
	TMOD=0X11;
	TH0=0;
	TL0=0;
	ET0=1;
	ET1=1;
	EA=1;

	for(i=0;i<15000;i++) {P1=0X01;P2=0X00;}
	for(i=0;i<15000;i++) {P1=0X03;P2=0X00;}
	for(i=0;i<15000;i++) {P1=0X07;P2=0X00;}
	for(i=0;i<15000;i++) {P1=0X0f;P2=0X00;}
	for(i=0;i<15000;i++) {P1=0X1f;P2=0X00;}
	for(i=0;i<15000;i++) {P1=0X3f;P2=0X00;}
	for(i=0;i<15000;i++) {P1=0X7f;P2=0X00;}
	for(i=0;i<15000;i++) {P1=0Xff;P2=0X00;}
	///////////////
	b[0]=1;b[1]=0;
	b[2]=1;b[3]=1;
	b[4]=1;b[5]=2;
	b[6]=1;b[7]=3;
	b[8]=1;b[9]=7;
	b[10]=1;b[11]=5;
	b[12]=1;b[13]=6;
	b[14]=2;b[15]=0;
	b[16]=2;b[17]=5;
	b[18]=2;b[19]=7;
	b[20]=3;b[21]=0;
	b[22]=3;b[23]=2;
	b[24]=3;b[25]=3;
	b[26]=3;b[27]=5;
	b[28]=3;b[29]=7;
	b[30]=4;b[31]=0;
	b[32]=4;b[33]=3;
	b[34]=4;b[35]=5;
	b[36]=4;b[37]=7;
	b[38]=5;b[39]=1;
	b[40]=5;b[41]=2;
	b[42]=5;b[43]=3;
	b[44]=5;b[45]=7;
	b[46]=5;b[47]=5;
	b[48]=5;b[49]=6;
	b[50]=5;b[51]=0;	
	count=26;
	while(p31)	playarray(count,b);

	music(3);music(0);music(0);music(0);
	music(3);music(0);
	music(3);
	music(1);
	music(3);music(0);music(0);
	music(5);music(5);music(0);music(0);
	music(15);
		        
    while(p30) 
	{
		display(speed-2);
		if(!p33) speed++;
		if(!p32) speed--;
		if(speed<=0) speed=1;
        if(speed>13) speed=13;
	}

	tempspeed=speed;

	b[0]=3;b[1]=1;b[2]=3;b[3]=2;b[4]=3;b[5]=3;count=3;//currentline=3;currentcol=3;currentoffset=3;count=3;
	
	while(1){
	
	objectl=(rand()/(currentoffset+1+speed)+1)%8;
	objectc=((rand()%(count*count-1)+currentoffset+speed)/currentcol*count)%8;//*count*currentoffset*currentoffset*currentcol%8;

	while(exist(objectl,objectc,count,b)==1)
	{
	;;
	objectl=(rand()/(currentoffset+2)+count+1+speed)%8;
	;;
	objectc=(((rand()+1)%(count*count-1)+currentoffset+speed)/currentcol*count+3)%8;
	}

	while(1){
	
	while(!p34) {b[2*count]=objectl;b[2*count+1]=objectc;count++;playarray(count,b);count--;}

	TR0=1;
	timewatcher=1;
 // while(p30&&p31&&p32&&p33) 
    while(timewatcher)
	{b[2*count]=objectl;b[2*count+1]=objectc;count++;playarray(count,b);count--;//for(i=0;i<100;i++)play(objectl,objectc);

	if(!p30){offset=0;if(currentoffset==1)offset=1;}
	else if(!p31){offset=1;if(currentoffset==0)offset=0;}
	else if(!p32){offset=2;if(currentoffset==3)offset=3;}
	else if(!p33){offset=3;if(currentoffset==2)offset=2;}
	else offset=currentoffset;}

	currentoffset=offset;

	switch(offset)
	{
		case 0:currentline-=1;b[2*count]=currentline;b[2*count+1]=currentcol;break;
		case 1:currentline+=1;b[2*count]=currentline;b[2*count+1]=currentcol;break;
		case 2:currentcol-=1;b[2*count]=currentline;b[2*count+1]=currentcol;break;
		case 3:currentcol+=1;b[2*count]=currentline;b[2*count+1]=currentcol;break;
	}
    if(currentcol<0||currentcol>7||currentline<0||currentline>7)
		{
		 k=count;
         for(j=0;j<4;j++) playarray(k,b);

	music(3);music(0);music(0);music(0);music(0);music(0);music(0);
	music(3);music(0);
	music(3);music(0);music(0);music(0);
	music(3);music(0);
	music(2);
	music(1);

	 	 timewatcher=1;speed=30;TR0=1;
		 while(timewatcher) display(k-3);speed=tempspeed;
	     return ;
		 }
	else if(exist(currentline,currentcol,count-1,b)==1)
		{
		 k=count;
         for(j=0;j<4;j++) playarray(k,b);
		 

	music(3);music(0);music(0);music(0);music(0);music(0);music(0);
	music(3);music(0);
	music(3);music(0);music(0);music(0);
	music(3);music(0);
	music(2);
	music(1);

	 	 timewatcher=1;speed=30;TR0=1;
		 while(timewatcher) display(k-3);speed=tempspeed;
	     return ;
		 }
	if(currentline==objectl&&currentcol==objectc){ b[2*count]=objectl;b[2*count+1]=objectc;count++;break;}

	move(count,b);
}}}
//4444444444444444444444444444444444444444444444444444
void play(int i,int j)
{
	P1=0x00;
	P2=0xff;
	switch(i)
	{
	 case 0: {p10=1;
	         switch(j)
			 {
			 case 0:p20=0;break;
			 case 1:p21=0;break;
			 case 2:p22=0;break;
			 case 3:p23=0;break;
			 case 4:p24=0;break;
			 case 5:p25=0;break;
			 case 6:p26=0;break;
			 case 7:p27=0;break;
			 default: P2=0xff;
			 }break;
			 }
	 case 1: {p11=1;
	         switch(j)
			 {
			 case 0:p20=0;break;
			 case 1:p21=0;break;
			 case 2:p22=0;break;
			 case 3:p23=0;break;
			 case 4:p24=0;break;
			 case 5:p25=0;break;
			 case 6:p26=0;break;
			 case 7:p27=0;break;
			 default: P2=0xff;
			 }break;
			 }
	 case 2: {p12=1;
	         switch(j)
			 {
			 case 0:p20=0;break;
			 case 1:p21=0;break;
			 case 2:p22=0;break;
			 case 3:p23=0;break;
			 case 4:p24=0;break;
			 case 5:p25=0;break;
			 case 6:p26=0;break;
			 case 7:p27=0;break;
			 default: P2=0xff;
			 }break;
			 }
	 case 3: {p13=1;
	         switch(j)
			 {
			 case 0:p20=0;break;
			 case 1:p21=0;break;
			 case 2:p22=0;break;
			 case 3:p23=0;break;
			 case 4:p24=0;break;
			 case 5:p25=0;break;
			 case 6:p26=0;break;
			 case 7:p27=0;break;
			 default: P2=0xff;
			 }break;
			 }
	 case 4: {p14=1;
	         switch(j)
			 {
			 case 0:p20=0;break;
			 case 1:p21=0;break;
			 case 2:p22=0;break;
			 case 3:p23=0;break;
			 case 4:p24=0;break;
			 case 5:p25=0;break;
			 case 6:p26=0;break;
			 case 7:p27=0;break;
			 default: P2=0xff;
			 }break;
			 }
	 case 5: {p15=1;
	         switch(j)
			 {
			 case 0:p20=0;break;
			 case 1:p21=0;break;
			 case 2:p22=0;break;
			 case 3:p23=0;break;
			 case 4:p24=0;break;
			 case 5:p25=0;break;
			 case 6:p26=0;break;
			 case 7:p27=0;break;
			 default: P2=0xff;
			 }break;
			 }
	 case 6: {p16=1;
	         switch(j)
			 {
			 case 0:p20=0;break;
			 case 1:p21=0;break;
			 case 2:p22=0;break;
			 case 3:p23=0;break;
			 case 4:p24=0;break;
			 case 5:p25=0;break;
			 case 6:p26=0;break;
			 case 7:p27=0;break;
			 default: P2=0xff;
			 }break;
			 }
	 case 7: {p17=1;
	         switch(j)
			 {
			 case 0:p20=0;break;
			 case 1:p21=0;break;
			 case 2:p22=0;break;
			 case 3:p23=0;break;
			 case 4:p24=0;break;
			 case 5:p25=0;break;
			 case 6:p26=0;break;
			 case 7:p27=0;break;
			 default: P2=0xff;
			 }break;
			 }
	 default:P1=0x00;
	}
}
/////////////////////////////////////////////////
void playarray(int count,unsigned char b[])
{
/*	TMOD=0X11;
	TH0=0;
	TL0=0;
	ET0=1;
	EA=1;*/
	TR0=1;

//	pan=1;
//	while(pan==1)
	timewatcher=1;
	while(timewatcher)
	for(i=0;i<=count-1;i++)
		play(b[2*i],b[2*i+1]);
}
///////////////////////////////////////////////////////
void move(int count, unsigned char b[])
{
	for(i=0;i<=2*count-1;i++)
		{
			b[i]=b[i+2];
		 }
}
///////////////////////////////////////////////////////
int exist(unsigned char line,unsigned char col,int counter, unsigned char b[])
{
for(i=1;i<=counter;i++)
   {if(line==b[2*i-2]&&col==b[2*i-1])
		return 1;
	else return 0;}
}
/////////////////////////////////////////////////////
void display(unsigned char score)
{
	switch(score)
	{
	case 0:	
	count=14;
	b[0]=1;b[1]=2;
	b[2]=1;b[3]=4;
	b[4]=1;b[5]=3;
	b[6]=1;b[7]=5;
	b[8]=2;b[9]=2;
	b[10]=3;b[11]=5;
	b[12]=4;b[13]=2;
	b[14]=3;b[15]=2;
	b[16]=2;b[17]=5;
	b[18]=4;b[19]=5;
	b[20]=5;b[21]=5;
	b[22]=5;b[23]=2;
	b[24]=5;b[25]=3;
	b[26]=5;b[27]=4;
	break;
	case 1:	
	count=16;
	b[0]=0;b[1]=4;
	b[2]=1;b[3]=4;
	b[4]=6;b[5]=2;
	b[6]=1;b[7]=3;
	b[8]=6;b[9]=3;
	b[10]=6;b[11]=4;
	b[12]=6;b[13]=5;
	b[14]=2;b[15]=2;
	b[16]=2;b[17]=3;
	b[18]=2;b[19]=4;
	b[20]=3;b[21]=3;
	b[22]=3;b[23]=4;
	b[24]=4;b[25]=3;
	b[26]=4;b[27]=4;
	b[28]=5;b[29]=3;
	b[30]=5;b[31]=4;
	break;
	case 2:	
	count=15;
	b[0]=1;b[1]=2;
	b[2]=1;b[3]=4;
	b[4]=1;b[5]=3;
	b[6]=1;b[7]=5;
	b[8]=2;b[9]=5;
	b[10]=3;b[11]=5;
	b[12]=4;b[13]=2;
	b[14]=4;b[15]=5;
	b[16]=4;b[17]=3;
	b[18]=4;b[19]=4;
	b[20]=5;b[21]=2;
	b[22]=6;b[23]=2;
	b[24]=6;b[25]=3;
	b[26]=6;b[27]=4;
	b[28]=6;b[29]=5;
	break;
	case 3:	
	count=15;
	b[0]=1;b[1]=2;
	b[2]=1;b[3]=4;
	b[4]=1;b[5]=3;
	b[6]=1;b[7]=5;
	b[8]=2;b[9]=5;
	b[10]=3;b[11]=5;
	b[12]=3;b[13]=4;
	b[14]=3;b[15]=2;
	b[16]=3;b[17]=3;
	b[18]=4;b[19]=5;
	b[20]=5;b[21]=5;
	b[22]=6;b[23]=2;
	b[24]=6;b[25]=3;
	b[26]=6;b[27]=4;
	b[28]=6;b[29]=5;
	break;
	case 4:	
	count=12;
	b[0]=1;b[1]=2;
	b[2]=1;b[3]=4;
	b[4]=2;b[5]=2;
	b[6]=2;b[7]=4;
	b[8]=3;b[9]=2;
	b[10]=3;b[11]=4;
	b[12]=4;b[13]=2;
	b[14]=4;b[15]=4;
	b[16]=4;b[17]=3;
	b[18]=4;b[19]=5;
	b[20]=5;b[21]=4;
	b[22]=6;b[23]=4;
	break;
	case 5:	
	count=14;
	b[0]=1;b[1]=2;
	b[2]=1;b[3]=4;
	b[4]=1;b[5]=3;
	b[6]=1;b[7]=5;
	b[8]=2;b[9]=2;
	b[10]=3;b[11]=5;
	b[12]=3;b[13]=4;
	b[14]=3;b[15]=2;
	b[16]=3;b[17]=3;
	b[18]=4;b[19]=5;
	b[20]=5;b[21]=5;
	b[22]=5;b[23]=2;
	b[24]=5;b[25]=3;
	b[26]=5;b[27]=4;
	break;
	case 6:	
	count=15;
	b[0]=1;b[1]=2;
	b[2]=1;b[3]=4;
	b[4]=1;b[5]=3;
	b[6]=1;b[7]=5;
	b[8]=2;b[9]=2;
	b[10]=3;b[11]=5;
	b[12]=3;b[13]=4;
	b[14]=3;b[15]=2;
	b[16]=3;b[17]=3;
	b[18]=4;b[19]=5;
	b[20]=5;b[21]=5;
	b[22]=5;b[23]=2;
	b[24]=5;b[25]=3;
	b[26]=5;b[27]=4;
	b[28]=4;b[29]=2;
	break;
	case 7:	
	count=8;
	b[0]=1;b[1]=2;
	b[2]=1;b[3]=4;
	b[4]=1;b[5]=3;
	b[6]=1;b[7]=5;
	b[8]=2;b[9]=5;
	b[10]=3;b[11]=5;
	b[12]=4;b[13]=5;
	b[14]=5;b[15]=5;
	break;
	case 8:	
	count=16;
	b[0]=1;b[1]=2;
	b[2]=1;b[3]=4;
	b[4]=1;b[5]=3;
	b[6]=1;b[7]=5;
	b[8]=2;b[9]=2;
	b[10]=3;b[11]=5;
	b[12]=3;b[13]=4;
	b[14]=3;b[15]=2;
	b[16]=3;b[17]=3;
	b[18]=4;b[19]=5;
	b[20]=5;b[21]=5;
	b[22]=5;b[23]=2;
	b[24]=5;b[25]=3;
	b[26]=5;b[27]=4;
	b[28]=4;b[29]=2;
	b[30]=2;b[31]=5;
	break;
	case 9:	
	count=15;
	b[0]=1;b[1]=2;
	b[2]=1;b[3]=4;
	b[4]=1;b[5]=3;
	b[6]=1;b[7]=5;
	b[8]=2;b[9]=2;
	b[10]=3;b[11]=5;
	b[12]=3;b[13]=4;
	b[14]=3;b[15]=2;
	b[16]=3;b[17]=3;
	b[18]=4;b[19]=5;
	b[20]=5;b[21]=5;
	b[22]=5;b[23]=2;
	b[24]=5;b[25]=3;
	b[26]=5;b[27]=4;
	b[28]=2;b[29]=5;
	break;
	case 10:	
	count=17;
	b[0]=1;b[1]=5;
	b[2]=1;b[3]=4;
	b[4]=1;b[5]=2;
	b[6]=1;b[7]=6;
	b[8]=2;b[9]=2;
	b[10]=2;b[11]=4;
	b[12]=2;b[13]=6;
	b[14]=3;b[15]=2;
	b[16]=3;b[17]=6;
	b[18]=3;b[19]=4;
	b[20]=4;b[21]=2;
	b[22]=4;b[23]=4;
	b[24]=4;b[25]=6;
	b[26]=5;b[27]=2;
	b[28]=5;b[29]=5;
	b[30]=5;b[31]=4;
	b[32]=5;b[33]=6;
	break;
	case 11:	
	count=10;
	b[0]=1;b[1]=5;
	b[2]=1;b[3]=2;
	b[4]=2;b[5]=2;
	b[6]=2;b[7]=5;
	b[8]=3;b[9]=2;
	b[10]=3;b[11]=5;
	b[12]=4;b[13]=5;
	b[14]=4;b[15]=2;
	b[16]=5;b[17]=2;
	b[18]=5;b[19]=5;
	break;
	default:
	count=17;
	b[0]=1;b[1]=4;
	b[2]=2;b[3]=4;
	b[4]=2;b[5]=2;
	b[6]=3;b[7]=1;
	b[8]=3;b[9]=2;
	b[10]=3;b[11]=4;
	b[12]=3;b[13]=5;
	b[14]=3;b[15]=3;
	b[16]=4;b[17]=4;
	b[18]=5;b[19]=4;
	b[20]=5;b[21]=3;
	b[22]=5;b[23]=1;
	b[24]=5;b[25]=2;
	b[26]=5;b[27]=5;
	b[28]=6;b[29]=4;
	b[30]=7;b[31]=4;
	b[32]=5;b[33]=6;
}
playarray(count,b);
}

void music(char rhythm)
{
    tempmusic=1;
	switch(rhythm)
	{
		case 1:high=0xf8,low=0x87;TR1=1;break;
		case 2:high=0xf9,low=0x5b;TR1=1;break;
		case 3:high=0xfa,low=0x12;TR1=1;break;
		case 5:high=0xfb,low=0x04;TR1=1;break;
		case 15:high=0xf6,low=0x08;TR1=1;break;
		case 0:TR1=0;for(i=0;i<2200;i++);break;
	 }
	while(1){
	 if(rhythm==0) {TR1=0;break;}
     if(tempmusic==0){TR1=0;break;}}
}
    


////////////////////////////////////////////////////////////////
/*
void move(in count,unsigned offset, unsigned char b[])
{
	switch(offset)
	{
		case 0:currentline-=1;b[2*count]=currentline;b[2*count+1]=currentcol;break;

		case 1:currentline+=1;count++;b[2*(count-1)]=currentline;b[2*count-1]=currentcol;break;

		case 2:currentcol-=1;count++;b[2*(count-1)]=currentline;b[2*count-1]=currentcol;break;

		case 3:currentcol+=1;count++;b[2*(count-1)]=currentline;b[2*count-1]=currentcol;break;
	}
}



/*	
	b[0]=7;b[1]=7;
	for(i=0;i<=100;i++)
		for(j=0;j<=count-1;j++)
			play(b[j],b[2*j+1]);
	
	b[2]=6;b[3]=6;count++;
	for(i=0;i<=100;i++)
		for(j=0;j<=count-1;j++)
			play(b[j],b[2*j+1]);

	for(i=0;i<=5;i++){
	count++;
	b[2*(count-1)]=i+2;	b[2*count-1]=i+2;
	for(i=0;i<=10;i++)
		for(j=0;j<=count-1;j++)
			play(b[j],b[2*j+1]);}*/




/*	for(i=1;i<=8;i++){
		count++;
		b[2*(count-1)]=i-1;	b[2*count-1]=i-1;}
	while(1){
    playarray(count,b);
	}*/

/*count=4;b[0]=0;b[1]=0;b[2]=1;b[3]=1;b[4]=2;b[5]=2;b[6]=3;b[7]=3;
while(1)

playarray(count,b);}*/

//play(0,0);play(1,1);play(2,2);play(3,3);play(4,4);play(4,5);play(6,7);}




/*
	switch(offset)
	{
		case 0:currentline-=1;count++;b[2*(count-1)]=currentline;b[2*count-1]=currentcol;break;
		case 1:currentline+=1;count++;b[2*(count-1)]=currentline;b[2*count-1]=currentcol;break;
		case 2:currentcol-=1;count++;b[2*(count-1)]=currentline;b[2*count-1]=currentcol;break;
		case 3:currentcol+=1;count++;b[2*(count-1)]=currentline;b[2*count-1]=currentcol;break;
	}
*/




//	playarray(count,b);
//	if(count>=64) return;

	//	{for(i=0;i<128;i++)
	//		b[i]=9;count=0;}






//	objectl=((rand()*currentline)*currentoffset-count)*currentoffset%8;
//	objectc=((rand()*currentline)*currentoffset+count)*currentoffset%8*objectl*((rand()-currentline)*currentoffset+count)*currentcol*currentoffset%8;
//	objectc=((rand()*count)*currentoffset+currentline)*currentoffset*objectl%8;
//	objectl=((rand()%(count*count+1)*currentoffset+count)/currentline)%8;
//	objectl=TH0%8;objectc=TL1%8;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -