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

📄 v06.c

📁 51下的 贪吃蛇 程序 用128864的LCD keil的开发环境
💻 C
📖 第 1 页 / 共 2 页
字号:
				*(xram+(y/8)*128+x+i)=chinese[chara*32+i];
				scope=&(xram+(y/8)*128+x+i);
				*(xram+(y/8)*128+x+128+i)=chinese[chara*32+16+i];
				scope=&(xram+(y/8)*128+x+128+i);
			}
			break;
	case 2:
			for(i=0;i<8;i++){
				*(xram+(y/8)*128+x)=chinese[chara*32+i];
				*(xram+(y/8)*128+x)=chinese[chara*32+i];
			}
			break;

	default:break;
   }
}
//----------------------write snake body---------------------------------------
void write_body(void){
	word i;
	byte j,temp,start;
	for(i=0;i<spoint;i++){
		if(point[sp_end-i].x==point[sp_end-i-1].x){	//write snake bode from snake head
			if(point[sp_end-i].y > point[sp_end-i-1].y){	//stand
				start=point[sp_end-i-1].y;	//add to next cells
				temp=point[sp_end-i].y-point[sp_end-i-1].y;

				for(j=0;j<temp;j++){		
					write_point(point[sp_end-i].x,start+j);		//  "|"
					write_point(point[sp_end-i].x-1,start+j);   //  "||"
				}

			}
			else{
				start=point[sp_end-i].y;	//dec to next cells
				temp=point[sp_end-i-1].y-point[sp_end-i].y;
			
				for(j=temp;j>1;j--){		
					write_point(point[sp_end-i].x,start+j);		//  "|"
					write_point(point[sp_end-i].x+1,start+j);   //  "||"
				}
			}
		}
		else{	
			if(point[sp_end-i].x > point[sp_end-i-1].x){	//lay
				start=point[sp_end-i-1].x;	//add to next cells
				temp=point[sp_end-i].x-point[sp_end-i-1].x;

				for(j=0;j<temp;j++){
					write_point(start+j,point[sp_end-i].y);			//	"--"
					write_point(start+j,point[sp_end-i].y+1);		//  "=="
				}
			}
			else{
				start=point[sp_end-i].x;	//dec to next cells
				temp=point[sp_end-i-1].x-point[sp_end-i].x;
			
				for(j=temp;j>1;j--){
					write_point(start+j,point[sp_end-i].y);			//	"--"
					write_point(start+j,point[sp_end-i].y+1);		//  "=="
				}
			}
		}
	}
}
//----------check the point is touch the body or square------------------------
byte check_point(){
	if((point[sp_end].x== 1)||(point[sp_end].x==126))
		return 0xff;
	else{
		if((point[sp_end].y==17)||(point[sp_end].y== 62))
			return 0xff;
		else
			return 0x00;		//that's all right
	}
}
//----------------------walk  ago orient---------------------------------------
void walk_old(void){    //the snake is walk front and don't creat cells
	byte tempx,tempx1,tempy,tempy1;
	byte endx,endx1,endy,endy1;
	endx =point[sp_end].x;	//move snake head
	endx1=point[sp_end-1].x;
	endy =point[sp_end].y;
	endy1=point[sp_end-1].y;
	if(endx==endx1){	// |
		if(endy>endy1){		// |
        	endy++;         // V
			point[sp_end].y=endy;
		}
		else{				// ^
			endy--;			// |
			point[sp_end].y=endy;
		}
	}
	else{
		if(endx>endx1){   //--->
			endx++;
			point[sp_end].x=endx;
		}
		else{			//<---
			endx--;
			point[sp_end].x=endx;
		}
	}
	tempx =point[sp_start].x;
	tempx1=point[sp_start+1].x;
	tempy =point[sp_start].y;
	tempy1=point[sp_start+1].y;
	if(tempx==tempx1){
		clear_point(tempx,point[sp_start].y);         //  "|"
		clear_point(tempx-1,point[sp_start].y);
		if(tempy>tempy1){		//move the snake tail
			tempy--;				// ^
			point[sp_start].y=tempy;// | 
		}
		else{
			tempy++;
			point[sp_start].y=tempy;
		}
	}
	else{
		clear_point(tempx,point[sp_start].y);         //  "--"
		clear_point(tempx,point[sp_start].y+1);
		if(tempx >tempx1){		// move the snake tail
			tempx--;				//   <----
			point[sp_start].x=tempx;
		}
		else{
			tempx++;				//  ---->
			point[sp_start].x=tempx;
		}
	}
	if((point[sp_start].x==point[sp_start+1].x)&&(point[sp_start].y==point[sp_start+1].y)){
		sp_start++;				//delete a cells  lline start move up "1"
		if(sp_start>=255)sp_start=0;
		spoint--;				//line long dec "1"
		if(sp_start==sp_end){
			sp_start=sp_end=0;
		}
	}
}
//----------------creat a new cell for left at now orient----------------------
void left(void){    //the snake is walk front and don't creat cells
	byte tempx,tempx1,tempy,tempy1;
	byte endx,endx1,endy,endy1;
	endx =point[sp_end].x;	//move snake head
	endx1=point[sp_end-1].x;
	endy =point[sp_end].y;
	endy1=point[sp_end-1].y;
	if(endx==endx1){	// |
		if(endy>endy1){		// |
        	endy++;         // V
			point[sp_end].y=endy;
		}
		else{				// ^
			endy--;			// |
			point[sp_end].y=endy;
		}
	}
	else{
		if(endx>endx1){   //--->
			endx++;
			point[sp_end].x=endx;
		}
		else{			//<---
			endx--;
			point[sp_end].x=endx;
		}
	}
	tempx =point[sp_start].x;
	tempx1=point[sp_start+1].x;
	tempy =point[sp_start].y;
	tempy1=point[sp_start+1].y;
	if(tempx==tempx1){
		clear_point(tempx,point[sp_start].y);         //  "|"
		clear_point(tempx-1,point[sp_start].y);
		if(tempy>tempy1){		//move the snake tail
			tempy--;				// ^
			point[sp_start].y=tempy;// | 
		}
		else{
			tempy++;
			point[sp_start].y=tempy;
		}
	}
	else{
		clear_point(tempx,point[sp_start].y);         //  "--"
		clear_point(tempx,point[sp_start].y+1);
		if(tempx >tempx1){		// move the snake tail
			tempx--;				//   <----
			point[sp_start].x=tempx;
		}
		else{
			tempx++;				//  ---->
			point[sp_start].x=tempx;
		}
	}
	if((point[sp_start].x==point[sp_start+1].x)&&(point[sp_start].y==point[sp_start+1].y)){
		sp_start++;				//delete a cells  lline start move up "1"
		if(sp_start>=255)sp_start=0;
		spoint--;				//line long dec "1"
		if(sp_start==sp_end){
			sp_start=sp_end=0;
		}
	}
}
//----------------------the game model-----------------------------------------
game(){	
		byte i;//i is y length;don,t bigger than 15
	    game_on=1;
    	orient=0;
		write_square(00,16,127,63,1);
		for(i=0;i<6;i++)
			put_char((16+16*i),0,0,i);
		sp_start=sp_end=spoint=0;
		point[0].x=60;  
    	point[0].y=38;	// snake  tail

		point[1].x=70;
		point[1].y=38;
  
		point[2].x=70;
		point[2].y=50;

		point[3].x=40;
		point[3].y=50;

		point[4].x=40;
		point[4].y=20;
		point[5].x=50;
		point[5].y=20;//sp_end id snake head pointer					
		sp_end=5;			
		spoint=5;			//initialize snake body
		write_body();
		display();
		while(game_on){
			if(move_flag){
				move_flag=0;
				switch (orient){
					case 0:
						walk_old();		
						break;
					case 1:			//creat a new cell for left at now orient
						left();
						break;
					case 2:			//creat a new cell for right at now orient
					//	right();
						break;
				   case  3:			//creat a new cell for up at now orient
				   	//	up();
				   		break; 
				   case  4:			//creat a new cell for down at now orient
				   	//	down();
				   		break;
					default: break;
				}
				write_body();
				display();
				if(check_point()){
					for(i=0;i<4;i++)
					put_char((32+16*i),32,0,i+6);	//print game over
			 		return;
				}
			}
		}
}
//-----------------------CPU initialization-----------------------------------

void init(void) {
	TMOD=0x21 ;		// (T1 MODE 2_send_flagME,T0 MODE 1_send_flagME)
	TCON=0x51 ;		//0101 0000 (TR1=1 , TR0=1
	SCON=0x50 ;		//0101 0000 (MODE 1 ;RECEIVE ENABLE)
	IP=0x10  ;		//0001 0000 (S-PORT HIGH interrupt)
	IE=0x12   ;		//0001 0010 (S_PORT AND TIME0 ENABLE INT)
	TL1=TH1=0xfd;	//9600bps
	PCON=0x00;		//SMOD=0
	IE = 0x92;
	TR1=0;
	EA=1;           // enable all interrupt
}

//-----------------------------------------------------------------------------
 main(){
 power=0;
 lcd_power=0;
 init();
 init_lcd();
 while(1){
	game();
//------------------------------------------------
	display();
	while(1);
	}
 }

⌨️ 快捷键说明

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