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

📄 rusian.c

📁 基于S3C2440开发板mini2440的俄罗斯方块程序
💻 C
📖 第 1 页 / 共 3 页
字号:
					save_InitM=cube_InitM+1;
					break;
				}
			}
			cube_M=0;
			if(cube[1]==save_cubexmax)
				{
					save_cube=cube[1];
					break;
				}
			if(cube[3]==save_cubexmax)
				{
					save_cube=cube[3];
					break;
				}
		}
//		Uart_Printf("save_cube=%d\n",save_cube);
//		Uart_Printf("cube1,2,3,4=%d,%d,%d,%d,%d,%d\n",cube[1],cube[2],cube[3],cube[4],save_cubexmax,save_cubeymin);
		save_InitM=0;
		for(j=0;j<4;j++)
		{
			for(cube_InitM=save_InitM;cube_InitM<16;cube_InitM++)
			{
				cube_M++;
				cube[cube_M]=cube_Init[tuch][cube_InitM];
				if(cube_M==4)
				{
					save_InitM=cube_InitM+1;
					break;
				}
			}
			cube_M=0;
			save_cubeymin=0;
//			Uart_Printf("save_cubexmax!!!!!!!!!!!!!=%d\n",save_cubexmax);
//			Uart_Printf("save_cubexmax=%d, %d, %d\n",save_cubexmax,save_cubeymax,save_cubeymin);
			for(;save_cubeymin<save_cubeymax;save_cubeymin+=10)
			{
				if((((cube[1]==save_cubexmax)|(cube[3]==save_cubexmax))&((cube[1]==(save_cubexmax-10))|(cube[3]==(save_cubexmax-10))))&(((cube[2]==save_cubeymin)|(cube[4]==save_cubeymin))&((cube[2]==(save_cubeymin+10))|(cube[4]==(save_cubeymin+10)))))
				{
//					NO_count[(save_cubexmaxagn-save_cubexmax)/10]++;
//					Uart_Printf("save_cubexmax!!!!!=%d  %d\n",save_cubexmax,i);
//					Uart_Printf("save_cubexmax=%d, %d, %d\n",save_cubexmax,save_cubeymax,save_cubeymin);
					Y_count[(save_cubexmax-10)/10]+=10;
					X_count[(drupcount+save_cubeymin)/10]+=10;
//					Uart_Printf("Y_count[%d]=%d\n",(i-10)/10,Y_count[(i-10)/10]);
				}
//				Uart_Printf("save_cubexmax=%d\n",save_cubexmax);
			}
			
		}
//		Uart_Printf("!!NO_count=%d\n",NO_count[(save_cubexmaxagn-save_cubexmax)/10]);
//		Uart_Printf("!!Y_countsaved=%d\n",Y_countsaved[7]);
//		Uart_Printf("!!X_countsaved=%d\n",X_countsaved[30]);
//		
	}
//	while(1);
//		for(j=0;j<16;j++)
//			 Uart_Printf("Y_count[%d]=%d\n",j,Y_count[j]);
}


/******************************To find out the drup-point at which the block have to be stoped,according to the "Screem_map" Array***************/  
void Cube_stop(void)
{
	cube_M=0;
	cube_stopMark=1;
	stop=0;
	Getsave_cubexmax();
	cube_InitM=0;
	save_InitM=0;
	for(j=0;j<4;j++)											//分别扫描方块的每个立方体
	{
		for(cube_InitM=save_InitM;cube_InitM<16;cube_InitM++)
		{
			cube_M++;
			cube[cube_M]=cube_Init[tuch][cube_InitM];
			if(cube_M==4)
			{
				save_InitM=cube_InitM+1;
				break;
			}
		}
		cube_M=0;


//			Uart_Printf("!!!!!!!!!!!!!!\n");
//			Uart_Printf("Y_countsaved[cube[1]/10]=%d,%d,%d,%d,   %d\n",320-Y_countsaved[cube[1]/10],320-Y_countsaved[cube[3]/10],(cube[2]+drupcount),(cube[4]+drupcount),drupcount);

		if((((cube[1]+cube[3])/2)>cube[1])&((drupcount%10)==0))					//比较得立方体X轴的最大值
		{	
			if((((cube[2]+cube[4])/2)>cube[2])&(Screem_map[(cube[3]-10)/10][(cube[4]+drupcount)/10]>0))  //与Screem_map数组中的二维数据对比
				{
					cube_stopMark=0;
					break;
				}
				if((((cube[2]+cube[4])/2)<cube[2])&(Screem_map[(cube[3]-10)/10][(cube[2]+drupcount)/10]>0))
				{
					cube_stopMark=0;
					break;
				}
		}
		if((((cube[1]+cube[3])/2)<cube[1])&((drupcount%10)==0))
		{	 
			if((((cube[2]+cube[4])/2)>cube[2])&(Screem_map[(cube[1]-10)/10][(cube[4]+drupcount)/10]>0))
				{
			 		cube_stopMark=0;
			 		break;
			 	}
			if((((cube[2]+cube[4])/2)>cube[2])&(Screem_map[(cube[1]-10)/10][(cube[4]+drupcount)/10]>0))
				{
			 		cube_stopMark=0;
			 		break;
			 	}
		}



//			if(j==3)stop=1;
//			if((drupcount>=260)&(Y_countsaved[7]>0))
//			{	Uart_Printf("cube[1][2][3][4]cube_InitM=%d,%d,%d,%d,%d,%d,%d\n",cube[1],cube[2],cube[3],cube[4],320-Y_countsaved[(cube[3]-10)/10],320-Y_countsaved[(cube[1]-10)/10],cube_InitM);
//				while(stop);}
	}
//			Uart_Printf("cube_stopMark=%d\n",cube_stopMark);
//			Uart_Printf("drupcount=%d\n",drupcount);
//			Uart_Printf("Y_countsaved[cube[1]/10]=%d,%d,%d,%d\n",320-Y_countsaved[cube[1]/10],320-Y_countsaved[cube[3]/10],(cube[2]+drupcount),(cube[4]+drupcount));
//		while(1);

	Getsave_cubexmax();
	Scan_cube();
		if(((drupcount+save_cubeymax)<320)&cube_stopMark)
			for(j=0;j<32;j++)
				X_count[j]=0;
		else if(((drupcount+save_cubeymax)>=320)|(!cube_stopMark))
				for(j=0;j<32;j++)
					X_countsaved[j]+=X_count[j];


	if(((drupcount+save_cubeymax)>=320)|(!cube_stopMark))
	{
	
		save_InitM=0;
		cube_M=0;
		for(j=0;j<4;j++)
		{
			for(cube_InitM=save_InitM;cube_InitM<16;cube_InitM++)
			{
				cube_M++;
				cube[cube_M]=cube_Init[tuch][cube_InitM];
				if(cube_M==4)
				{
					save_InitM=cube_InitM+1;
					break;
				}
			}
			cube_M=0;
			if(((cube[1]+cube[3])/2)>cube[1])
			{	
				if(((cube[2]+cube[4])/2)>cube[2])
					{Screem_map[(cube[3]-10)/10][(cube[4]+drupcount-10)/10]=1;
//					Uart_Printf("Screem_map[%d][%d]=%d\n",(cube[3]-10)/10,(cube[4]+drupcount-10)/10,Screem_map[(cube[3]-10)/10][(cube[4]+drupcount-10)/10]);
					}
				if(((cube[2]+cube[4])/2)<cube[2])
					{Screem_map[(cube[3]-10)/10][(cube[2]+drupcount-10)/10]=1;
//					Uart_Printf("Screem_map[%d][%d]=%d\n",(cube[3]-10)/10,(cube[2]+drupcount-10)/10,Screem_map[(cube[3]-10)/10][(cube[2]+drupcount-10)/10]);
					}
			}
			if(((cube[1]+cube[3])/2)<cube[1])
			{	 
				if(((cube[2]+cube[4])/2)>cube[2])
					{Screem_map[(cube[1]-10)/10][(cube[4]+drupcount-10)/10]=1;
//					Uart_Printf("Screem_map[%d][%d]=%d\n",(cube[1]-10)/10,(cube[4]+drupcount-10)/10,Screem_map[(cube[1]-10)/10][(cube[4]+drupcount-10)/10]);
					}
				if(((cube[2]+cube[4])/2)<cube[2])
					{Screem_map[(cube[1]-10)/10][(cube[2]+drupcount-10)/10]=1;
//					Uart_Printf("Screem_map[%d][%d]=%d\n",(cube[1]-10)/10,(cube[2]+drupcount-10)/10,Screem_map[(cube[1]-10)/10][(cube[2]+drupcount-10)/10]);
					}
			}
		}
//		Uart_Printf("Screem_map[7][31]=%d,%d,%d,%d,%d,%d,%d\n",Screem_map[7][31],Screem_map[7][30],Screem_map[8][31],Screem_map[8][30],Screem_map[9][31],Screem_map[9][30],drupcount);
		
		
	}





}

/*******************************Delet the line which has 16 cubes according to the "Screem_map" Array**************************/   
void Cube_delet(void)
{
	for(i=0;i<32;i++)
	{
		if(X_countsaved[i]>=160)
		{
			for(j=0;j<16;j++)
				for(cube_down=i;cube_down>0;cube_down--)
					Screem_map[j][cube_down]=Screem_map[j][cube_down-1];
			for(cube_down=i;cube_down>0;cube_down--)
				X_countsaved[cube_down]=X_countsaved[cube_down-1];
				
			cube_delet++;
			if((cube_delet==3)|(cube_delet==4))
				Lcd_printf(162,152,0xf800,RGB( 0xFF,0xFF,0xFF),0,"Nice Work!\n");
				
			for(j=0;j<16;j++)
				Glib_FilledRectangle(j*10,i*10,j*10+10,i*10+10,0x001f);
				delay2();
			for(j=0;j<16;j++)
				Glib_FilledRectangle(j*10,i*10,j*10+10,i*10+10,0x07e0);
				delay2();
			for(j=0;j<16;j++)
				Glib_FilledRectangle(j*10,i*10,j*10+10,i*10+10,0xf800);
				delay2();
			for(j=0;j<16;j++)
				Glib_FilledRectangle(j*10,i*10,j*10+10,i*10+10,(0x1f<<11) | (0x3f<<5) | (0x1f));
			Uart_Printf("I'm out now!\n   I=%d\n",i);
			Uart_Printf("X_countsaved[%d]=%d\n",i,X_countsaved[i]);
		}
		
	}	
		if(cube_delet==1)
			score+=100;
		if(cube_delet==2)
			score+=200;
		if(cube_delet==3)
			score+=500;
		if(cube_delet==4)
			score+=700;
		cube_delet=0;
//		Lcd_printf(162,152,0xf800,RGB( 0xFF,0xFF,0xFF),0,"Nice work!\n");
		
				for(j=0;j<16;j++)
				for(cube_down=0;cube_down<32;cube_down++)
					if(Screem_map[j][cube_down]==1)
					{
						clr=randomnumber()%5;
							if(clr<0)
								clr=-clr;
						Glib_FilledRectangle(j*10,cube_down*10,j*10+10,cube_down*10+10,cube_color[clr]);
					}
					else if(Screem_map[j][cube_down]==0)
						Glib_FilledRectangle(j*10,cube_down*10,j*10+10,cube_down*10+10,(0x1f<<11) | (0x3f<<5) | (0x1f));
	
//	Uart_Printf("X_countsaved[31]=%d,%d\n",X_countsaved[31],X_countsaved[30]);
}


/*********************************Init of the "cube_Init" Array,according to the randomnumber "init"****************/
void Cube_Inition(void)
{
	switch(init)
	{
		case 0:
			for(i=0;i<4;i++)
 			{
 				for(j=0;j<16;j++)
 				{
 					if(window) 				
 					{
 					 	cube_Initsaved[i][j]=cube_Init1[i][j];
 					 	turn_mark_window[i][j]=turn_mark1[i][j];
 					}
 					else 
 					{
 						cube_Init[i][j]=cube_Init1[i][j];
 						turn_mark_eag[i][j]=turn_mark1[i][j];
 					}
 					 
 				}
 				
 			}
 			window=0;
 			break;
	
		case 1:
			for(i=0;i<4;i++)
 			{
 				for(j=0;j<16;j++)
 				{
 					if(window) 				
 					{
 					 	cube_Initsaved[i][j]=cube_Init2[i][j];
 					 	turn_mark_window[i][j]=turn_mark2[i][j];
 					}
 					else 
 					{
 						cube_Init[i][j]=cube_Init2[i][j];
 						turn_mark_eag[i][j]=turn_mark2[i][j];
 					}
 					 
 				}
 			}
 			window=0;
 			break;
 		case 2:
			for(i=0;i<4;i++)
 			{
 				for(j=0;j<16;j++)
 				{
 					if(window) 				
 					{
 					 	cube_Initsaved[i][j]=cube_Init3[i][j];
 					 	turn_mark_window[i][j]=turn_mark3[i][j];
 					}
 					else 
 					{
 						cube_Init[i][j]=cube_Init3[i][j];
 						turn_mark_eag[i][j]=turn_mark3[i][j];
 					}
 					 
 				}
 			}
 			window=0;
 			break;
 		case 3:
			for(i=0;i<4;i++)
 			{
 				for(j=0;j<16;j++)
 				{
 					if(window) 				
 					{
 					 	cube_Initsaved[i][j]=cube_Init4[i][j];
 					 	turn_mark_window[i][j]=turn_mark4[i][j];
 					}
 					else 
 					{
 						cube_Init[i][j]=cube_Init4[i][j];
 						turn_mark_eag[i][j]=turn_mark4[i][j];
 					}
 					 
 				}
 				
 			}
 			window=0;
 			break;
 		case 4:
			for(i=0;i<4;i++)
 			{
  				for(j=0;j<16;j++)
 				{
 					if(window) 				
 					{
 					 	cube_Initsaved[i][j]=cube_Init5[i][j];
 					 	turn_mark_window[i][j]=turn_mark5[i][j];
 					}
 					else 
 					{
 						cube_Init[i][j]=cube_Init5[i][j];
 						turn_mark_eag[i][j]=turn_mark5[i][j];
 					}
 					 
 				}
 				
 			}
 			window=0;
 			break;
 		case 5:
			for(i=0;i<4;i++)
 			{
 				for(j=0;j<16;j++)
 				{
 					if(window) 				
 					{
 					 	cube_Initsaved[i][j]=cube_Init6[i][j];
 					 	turn_mark_window[i][j]=turn_mark6[i][j];
 					}
 					else 
 					{
 						cube_Init[i][j]=cube_Init6[i][j];
 						turn_mark_eag[i][j]=turn_mark6[i][j];
 					}
 					 
 				}
 				
 			}
 			window=0;
 			break;
 		case 6:
			for(i=0;i<4;i++)
 			{
 				for(j=0;j<16;j++)
 				{
 					if(window) 				
 					{
 					 	cube_Initsaved[i][j]=cube_Init7[i][j];
 					 	turn_mark_window[i][j]=turn_mark7[i][j];
 					}
 					else 
 					{
 						cube_Init[i][j]=cube_Init7[i][j];
 						turn_mark_eag[i][j]=turn_mark7[i][j];
 					}
 					 
 				}
 				
 			}
 			window=0;
 			break;
 		default : break;
	}
}


/***************************************************Clear the pre-view window*******************************/
void Clear_window(void)
{
	cube_M=0;
	save_InitM=0;
	windowcenterx=(105+turn_mark_window[2][tuchag]);
	windowcentery=turn_mark_window[3][tuchag];
	for(j=0;j<4;j++)
	{
		for(cube_InitM=save_InitM;cube_InitM<16;cube_InitM++)
		{
			cube_M++;
			cube[cube_M]=cube_Initsaved[tuchag][cube_InitM];
			if(cube_M==4)
			{
				save_InitM=cube_InitM+1;
				break;
			}
		}
		cube_M=0;
		
		Glib_FilledRectangle(cube[1]+windowcenterx,cube[2]+windowcentery,cube[3]+windowcenterx,cube[4]+windowcentery,(0x1f<<11) | (0x3f<<5) | (0x1f));
//		Uart_Printf("clearing_window!\n");

	}
//		Uart_Printf("window_cleared!\n");
}


/****************************************************Paint the pre-view window*******************************/
void Paint_window(void)
{
	cube_M=0;
	save_InitM=0;
	windowcenterx=(105+turn_mark_window[2][tuchag]);
	windowcentery=turn_mark_window[3][tuchag];
	for(j=0;j<4;j++)
	{
		for(cube_InitM=save_InitM;cube_InitM<16;cube_InitM++)
		{
			cube_M++;
			cube[cube_M]=cube_Initsaved[tuchag][cube_InitM];
			if(cube_M==4)
			{
				save_InitM=cube_InitM+1;
				break;
			}
		}
		cube_M=0;
		
		Glib_FilledRectangle(cube[1]+windowcenterx,cube[2]+windowcentery,cube[3]+windowcenterx,cube[4]+windowcentery,cube_color[j]);
//		Uart_Printf("painting_window!\n");
	}
//		Uart_Printf("window_painted!\n");
}

/////////////////////////
/*****************************************************Main Progeram of drawing block*************************/
/////////////////////////
void BlockGame(void)
{
	/*****************************************************Game start*********************************************/
	Glib_FilledRectangle(161,0,161,320,0x001f);					/********Paint the bound line**************/
	Glib_FilledRectangle(210,260,233,270,0xf800);				//Right-Move button.
	Lcd_printf(215,271,0xf800,RGB( 0xFF,0xFF,0xFF),0,"右\n");
	
	Glib_FilledRectangle(193,258,198,272,0xf800);				//start/pause button
	Glib_FilledRectangle(202,258,207,272,0xf800);				//start/pause button
	Glib_FilledRectangle(167,260,190,270,0xf800);				//Left-Move button.
	Lcd_printf(167,271,0xf800,RGB( 0xFF,0xFF,0xFF),0,"左\n");
	
	Glib_FilledRectangle(195,232,205,255,0xf800);				//turn right button
	Lcd_printf(188,215,0xf800,RGB( 0xFF,0xFF,0xFF),0,"旋转\n");
	
	Glib_FilledRectangle(195,275,205,298,0xf800);				//durpspeed up button
	Lcd_printf(194,300,0xf800,RGB( 0xFF,0xFF,0xFF),0,"下\n");
	Glib_Rectangle(175,10,225,60,cube_color[clr]);						//Paint the Per-view window.
//	Glib_Rectangle(174,9,226,61,0x001f);
		clr=randomnumber()%5;
		if(clr<0)
			color1[j]=-clr;
	Glib_Rectangle(174,9,226,61,cube_color[clr]);
	clr=randomnumber()%5;
		if(clr<0)
			color1[j]=-clr;
	Glib_Rectangle(173,8,227,62,cube_color[clr]);
//	Lcd_printf(100,0,RGB( 0xFF,0xFF,0xFF),RGB( 0x00,0x00,0x00),0,"%02d:%02d:%02d\n", rHour, rMinute, rSecond);


	/*****************************************************Draw the first block,being followed by others*************/
	for(j=0;j<8;j++)
	{
		save_cubey[j]=0;										//The Data Array which saves the cube Y-poseasion.
	}
	sc=0;
	cube_InitM=0;
	cube_M=0;
	save_InitM=0;

⌨️ 快捷键说明

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