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

📄 main.c

📁 这是我在ARM7Samsung3C44B0x芯片的实验板上开发的吃豆子游戏的源代码
💻 C
📖 第 1 页 / 共 2 页
字号:
	
	initfinished = TRUE;
	
	while(1)
	{
		pMsg = WaitMessage(0);
		switch (pMsg->Message)
		{
			case OSM_KEY:
				onKey(pMsg->WParam, pMsg->LParam);
		}
		DeleteMessage(pMsg);
		OSTimeDly(200);
	}
	
	DestoryDC(pdc);
}

/////////draw_rect///////////////////
void draw_rect(u8 headx, u8 heady, u8 endx, u8 endy)
{
	if (endy == heady)
		{
			if (headx > endx)
				FillRect(pdc, 20+5*(endx-1), 20+5*(endy-1), 20+5*headx, 20+5*endy,GRAPH_MODE_NORMAL, RGB(0, 0, 0));
			else
				FillRect(pdc, 20+5*(headx-1), 20+5*(endy-1), 20+5*endx, 20+5*endy,GRAPH_MODE_NORMAL, RGB(0, 0, 0));
			
		}
	else if (endx == headx)
		{
			if (heady > endy)
				FillRect(pdc, 20 + 5 *(endx - 1), 20 + 5 *(endy - 1), 20 + 5 * headx, 20 + 5 * heady,GRAPH_MODE_NORMAL, RGB(0, 0, 0));
			else
				FillRect(pdc, 20 + 5 *(endx - 1), 20 + 5 *(heady - 1), 20 + 5 * headx, 20 + 5 * endy,GRAPH_MODE_NORMAL, RGB(0, 0, 0));
		}
}


////////check_status///////////////////////
void Check()
{
	
	int i = 0;
	//if( (HeadPos[0]>xmax)||(HeadPos[0] < xmin )||(HeadPos[1] > ymax )||(HeadPos[1] < ymin ) )



	//{	
		//gameover = TRUE;
	       //return;
        	//}

	__asm
	{
	  cmp HeadPos[0], xmax
	  bgt gameend
	  cmp HeadPos[0], xmin
	  blt gameend
	  cmp HeadPos[1], ymax
	  bgt gameend
	  cmp HeadPos[1], ymin
	  bge gamecontinue
	  
	  gameend:
	     mov gameover,#1
	  gamecontinue:
	}	
	
	if (gameover == TRUE) return;	
	
	if (IsInRect(pbarRect1_5, HeadPos[0], HeadPos[1]) )
		{
			gameover = TRUE;
			return;
		}
	if  (IsInRect(pbarRect2_5, HeadPos[0], HeadPos[1]) )
		{
			gameover = TRUE;
			return;
		}
		
	if (HeadPos[0] <= 20)
		{
			if (HeadPos[1] <=20)
				{
					for (i=0;i<3;i++)
					    if (boolbean00[i] == TRUE)
					    {
						if  ( (bean00[i][0] == HeadPos[0]) && (bean00[i][1] == HeadPos[1]) )
								{
								    
							  			 catch = TRUE;
										 boolbean00[i] = FALSE;
										 addcount = 2;
							   			 return;
									
								}
						
					     }
				}
			else
				{
					if (boolbean01[0] == TRUE)
					{
						if ( (bean01[0][0] == HeadPos[0]) && (bean01[0][1] == HeadPos[1]) )
							{ 
							   catch = TRUE;
							   boolbean01[0] = FALSE;
							   addcount = 2;
							   return;
							}
						
					}
				}
		}
	else
		{
			if (HeadPos[1] <=20)
				{
					
					if (boolbean10[0] == TRUE)
					{
					         if ( (bean10[0][0] == HeadPos[0]) && (bean10[0][1] == HeadPos[1]) )
							{ 
							   catch = TRUE;
							   boolbean10[0] = FALSE;
							   addcount = 2;
							   return;
							}
						
					}
				}
			else
				{
					if (boolbean11[0] == TRUE)
					{
					         if ( (bean11[0][0] == HeadPos[0]) && (bean11[0][1] == HeadPos[1]) )
							{ 
							   catch = TRUE;
							   boolbean11[0] = FALSE;
							   addcount = 2;
							   return;
							}
						
					}

				}
		}

	gamepass = TRUE;
	for (i=0;i<3;i++)
	   if (boolbean00[i] == TRUE)  
		gamepass = FALSE;
	if ( (boolbean01[0] == TRUE)|| (boolbean10[0] == TRUE) ||(boolbean11[0] == TRUE) )
		gamepass = FALSE;
	
		
 }
	

			
///////// Transmit_Task /////////////
void Transmit_Task(void *Id)
{
	int i = 0,j=0;
	u8 oldendpos[2];
	
	
	char Game_Over_Caption_8[]="Game Over";
	char Game_Paused_Caption_8[]="Game Paused";
	char Game_Pass_Caption_8[]="Game Passed";

	U16 Game_Over_Caption_16[20];
	U16 Game_Paused_Caption_16[20];
	U16 Game_Pass_Caption_16[20];
	
	strChar2Unicode(Game_Over_Caption_16, Game_Over_Caption_8);
	strChar2Unicode(Game_Paused_Caption_16, Game_Paused_Caption_8);
	strChar2Unicode(Game_Pass_Caption_16, Game_Pass_Caption_8);

	
	if (initfinished == FALSE)
	   OSTimeDly(2000);
	
	while(1)
  {
  	if (pause == TRUE)
  		{
  			TextOut(pdc, 100,115, Game_Paused_Caption_16, TRUE, FONTSIZE_SMALL);
			OSTimeDly(200);
			continue;
		}
	if (gameover == TRUE) 
		{
			TextOut(pdc, 100,115, Game_Over_Caption_16, TRUE, FONTSIZE_SMALL);
			OSTimeDly(200);
			continue;
		}
	if (gamepass == TRUE)
	{
		TextOut(pdc,100,115,Game_Pass_Caption_16,TRUE,FONTSIZE_SMALL);
		OSTimeDly(200);
		continue;
	}	

  			
	oldendpos[0] = EndPos[0];
	oldendpos[1] = EndPos[1];

	//判断snake头部的变化
	switch (HeadDirect)
		{
			case 1:
				HeadPos[0] = HeadPos[0] + 1;
				break;
			case 2:
				HeadPos[0] = HeadPos[0] - 1;
				break;
			case 3:
				HeadPos[1] = HeadPos[1] - 1;
				break;
			case 4:
				HeadPos[1] = HeadPos[1] + 1;
				break;
		}
	//判断snake尾部的变化
	
	if (ChangePointCount > 0)
	{
	  if ( ( abs(ChangePointPos[ChangePointCount-1][0]-EndPos[0])+abs(ChangePointPos[ChangePointCount-1][1]-EndPos[1])) == 0)
		  {
			 DelChangePoint();
		  }
	}
	switch(EndDirect)
			{
				case 1:
					EndPos[0] = EndPos[0] + 1;
					break;
				case 2:
					EndPos[0] = EndPos[0] - 1;
					break;
				case 3:
					EndPos[1] = EndPos[1] - 1;
					break;
				case 4:
					EndPos[1] = EndPos[1] + 1;
					break;
			}

	Check();
	if (gameover == TRUE) 
		{
			TextOut(pdc, 100,115, Game_Over_Caption_16, TRUE, FONTSIZE_SMALL);
			OSTimeDly(200);
			continue;
		}
	if (gamepass == TRUE)
	{
		TextOut(pdc,100,115,Game_Pass_Caption_16,TRUE,FONTSIZE_SMALL);
		OSTimeDly(200);
		continue;
	}	

       if (catch) {BEEP_ENABLE();
                       for(j=0;j>50000;j++);
                       Uart_Printf("Catch a bean!!!\n");
                       BEEP_DISABLE();
       	}
       
	if (addcount > 0)
		{
			EndPos[0] = oldendpos[0];
			EndPos[1] = oldendpos[1];
			addcount--;
			
			catch = FALSE;
		}

	//绘制豆子

	FillRect2(pdc, psnakeRect, GRAPH_MODE_NORMAL, RGB(100, 255, 0));//清除主窗口的显示	

	for(i=0;i<3;i++)
		{
			if (boolbean00[i] == TRUE)
			{
				Circle(pdc,20+5*bean00[i][0]-2, 20+5*bean00[i][1]-2, 2);
			}
		}
	if (boolbean01[0] == TRUE)
		{
			Circle(pdc,20+5*bean01[0][0]-2, 20+5*bean01[0][1]-2, 2);
		}
	if (boolbean10[0] == TRUE)
		{
			Circle(pdc,20+5*bean10[0][0]-2, 20+5*bean10[0][1]-2, 2);

		}
	if (boolbean11[0] == TRUE)
		{
			Circle(pdc,20+5*bean11[0][0]-2, 20+5*bean11[0][1]-2, 2);
		}
	

	
	//绘制snake
	//ClearScreen();
	
	
	//Draw3DRect2(pdc, psnakeRect, RGB(0, 0, 0), RGB(0, 0, 0));
	
	FillRect2(pdc, pbarRect1, GRAPH_MODE_NORMAL, RGB(0, 0, 255));
	FillRect2(pdc, pbarRect2, GRAPH_MODE_NORMAL, RGB(0, 0, 255));

	
	if (ChangePointCount==0)
		{
		draw_rect(HeadPos[0],HeadPos[1], EndPos[0], EndPos[1]);
		}
	else
	{
		
		draw_rect(HeadPos[0],HeadPos[1], ChangePointPos[0][0], ChangePointPos[0][1]);
		for(i=1; i<ChangePointCount; i++)
		{
	
			draw_rect(ChangePointPos[i-1][0], ChangePointPos[i-1][1], ChangePointPos[i][0], ChangePointPos[i][1]);
		}

		draw_rect(ChangePointPos[i-1][0], ChangePointPos[i-1][1], EndPos[0],EndPos[1]);
	}

	OSTimeDly(200);
  }
}
				
	
				
	
					
    

⌨️ 快捷键说明

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