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

📄 game.c

📁 MST726驱动TFT屏程序,源代码!很好的资料
💻 C
📖 第 1 页 / 共 2 页
字号:
BYTE i,j;
	       Game_get_matrix(nblock);
		for(i=0;i<3;i++)
 			for(j=0;j<3;j++)
 		{
 			if(TempMatrix[i][j]==0)
 				{
 				BOOL Flag_1=FALSE;
 				if(Game_gridMatrix[nblock.x+i][nblock.y+j]==1)
					Flag_1=TRUE;
				if(Flag_1)
					return TRUE;
 				}
 		}

		return FALSE;
}

void Game_ini_grid(void)
{
BYTE i,j;

    for(i=0;i<MaxColume;i++)
 		for(j=0;j<MaxLine;j++)
 	{
		Game_gridMatrix[i][j]=0;
	}

}

void Game_draw_grid(Gameblock drblock)
{
BYTE i,j;

    Osd_SetTextColor(drblock.color, CP_BlackColor);

    for(i=1;i<MaxColume;i++)
 		for(j=MinLine+2;j<MaxLine;j++)
 	{
			if(Game_gridMatrix[i][j]==1)
				Osd_DrawStr(i,j,"\x087");
			else
				Osd_DrawStr(i,j,"\x088");
	}

}

Gameblock Game_createblock()
{
 XDATA Gameblock newblock ;
 BYTE r;


 r=rand();
 r+=(g_uwGameMsCounter%11);
 r=r%6;

 switch(r)
 {case(0):newblock.type=CP_Gameblock_I;newblock.color=CP_SeaBlueColor; break;
  case(1):newblock.type=CP_Gameblock_O;newblock.color=CP_BlueColor; break;
  case(2):newblock.type=CP_Gameblock_SO;newblock.color=CP_GreenColor; break;
  case(3):newblock.type=CP_Gameblock_T;newblock.color=CP_YellowColor; break;
  case(4):newblock.type=CP_Gameblock_L;newblock.color=CP_RedColor; break;
  case(5):newblock.type=CP_Gameblock_Z;newblock.color=CP_WhiteColor; break;
 }
 newblock.shape=1;
 newblock.x=3;
 newblock.y=0;
 if(GameBlockFastDownFlag)
 	Clr_GameBlockFastDownFlag();
 return newblock;
}

Gameblock Game_change(Gameblock nblock)
{
 switch(nblock.type)
 {case CP_Gameblock_I:
    switch(nblock.shape)
    {
    	case(1):
		if((nblock.x<MinColume)||(nblock.x+2==MaxColume)||Game_check_change(nblock))
			//printf("ID %d", nblock.x);
			return nblock;
		Game_clear_block(nblock);
		nblock.shape++;
		break;
       case(2):
		if(Game_check_change(nblock))
       		return nblock;
       	Game_clear_block(nblock);
		nblock.shape--;
		break;
    }
   break;
   case CP_Gameblock_T:
    switch(nblock.shape)
    {
    	case(1):
		if((nblock.x<MinColume)||Game_check_change(nblock))
			//printf("ID %d", nblock.x);
			return nblock;
		Game_clear_block(nblock);
		nblock.shape++;
		break;
       case(2):
		if((nblock.y+2==MaxLine)||Game_check_change(nblock))
       		return nblock;
       	Game_clear_block(nblock);
		nblock.shape++;
		break;
	case(3):
		if((nblock.x+2==MaxColume)||Game_check_change(nblock))
       		return nblock;
       	Game_clear_block(nblock);
		nblock.shape++;
		break;
	case(4):
		if(Game_check_change(nblock))
       		return nblock;
       	Game_clear_block(nblock);
		nblock.shape=1;
		break;
    }
   break;
  case CP_Gameblock_L:
    switch(nblock.shape)
    {
    	case(1):
		if(Game_check_change(nblock))
			return nblock;
		Game_clear_block(nblock);
		nblock.shape++;
		break;
       case(2):
		if((nblock.x<MinColume)||Game_check_change(nblock))
       		return nblock;
       	Game_clear_block(nblock);
		nblock.shape++;
		break;
	case(3):
		if(Game_check_change(nblock))
       		return nblock;
       	Game_clear_block(nblock);
		nblock.shape++;
		break;
	case(4):
		if((nblock.x+2==MaxLine)||Game_check_change(nblock))
       		return nblock;
       	Game_clear_block(nblock);
		nblock.shape=1;
		break;
    }
   break;
   case CP_Gameblock_Z:
    switch(nblock.shape)
    {
    	case(1):
		if((Game_gridMatrix[nblock.x+1][nblock.y])||(Game_gridMatrix[nblock.x][nblock.y+1]))
			return nblock;
		Game_clear_block(nblock);
		nblock.shape++;
		break;
       case(2):
		if((Game_gridMatrix[nblock.x][nblock.y])||(Game_gridMatrix[nblock.x+1][nblock.y+1]))
       		return nblock;
       	Game_clear_block(nblock);
		nblock.shape--;
		break;
    }
   break;

  default:
   	break;
 }

return nblock;
}

void Game_draw_delline(BYTE nline,BOOL Line1,BOOL Line2,BOOL Line3)
{
BYTE i,j,k;


          for(k=0;k<2;k++)
          	{
          		Osd_SetTextColor(CP_BlueColor, CP_BlackColor);
			for(j=nline;j<nline+3;j++)
	   			for(i=1;i<MaxColume;i++)
	   				{
	   				  if(j==nline)
	   				  	{
						if(!Line1)
							break;
	   				  	}
					 else if(j==nline+1)
					 	{
						if(!Line2)
							break;
					 	}
					 else
					 	{
						if(!Line3)
							break;
					 	}
		      			Osd_DrawStr(i,j,"\x087");
	   				}

			Delay1ms(200);

			Osd_SetTextColor(CP_BlackColor, CP_BlackColor);
			for(j=nline;j<nline+3;j++)
	   			for(i=1;i<MaxColume;i++)
	   				{
	   				 if(j==nline)
	   				 	{
						if(!Line1)
							break;
	   				 	}
					 else if(j==nline+1)
					 	{
						if(!Line2)
							break;
					 	}
					 else
					 	{
						if(!Line3)
							break;
					 	}
		      	 			Osd_DrawStr(i,j,"\x088");
	   				}

	   		Delay1ms(200);

          	}

}

BOOL Game_del_line(BYTE nline)
{
   BYTE i,j,k,m;
   BOOL Flag_1=FALSE;
   BOOL Flag_del1=FALSE,Flag_del2=FALSE,Flag_del3=FALSE;

   	for(j=nline;j<nline+3;j++)
		for(i=1;i<MaxColume;i++)
   		{

   			if(j>=MaxLine)
				break;
			if(!Game_gridMatrix[i][j])
				break;
			if(i==MaxColume-1)
				{
					Score++;
					if(j==nline)
						Flag_del1=TRUE;
					else if(j==nline+1)
						Flag_del2=TRUE;
					else
						Flag_del3=TRUE;

					Flag_1=TRUE;
					for(m=j;m>0;m--)
        					for(k=0;k<MaxColume;k++)
  							Game_gridMatrix[k][m]=Game_gridMatrix[k][m-1];
				}

   		}
	if(Flag_1)
		Game_draw_delline(nline,Flag_del1,Flag_del2,Flag_del3);

	return Flag_1;
}

void GameVariableInitial(void)
{
	g_bGameEnable=0;
	g_ucGameKeyControlStatus=GK_GameKeyNop;
}

BOOL Game_initial(void)
{
	Score=0;
	g_bGameEnable=1;
	g_ucGameStatus=GS_GameReStart;
	   return TRUE;
}

BOOL Game_Start(void)
{
	g_ucGameStatus=GS_GameRunning;
       Game_MenuExec();
	Game_ini_grid();
	g_GameNowBlock=Game_createblock();
	g_GameNextBlock=Game_createblock();
       Game_draw_next(g_GameNextBlock);
       Game_draw_block(g_GameNowBlock);
	   return TRUE;
}

void GameOverCheck(void)
{
   if(Game_check_top(g_GameNextBlock))
	{
   	 g_ucGameStatus=GS_GameStop;
   	 Game_restart();
	}
   else
   	{
       g_GameNowBlock=g_GameNextBlock;
       g_GameNextBlock=Game_createblock();
       Game_draw_next(g_GameNextBlock);
       Game_draw_block(g_GameNowBlock);
   	}
}
void Gameprocess(void)
{

   if(g_ucGameKeyControlStatus)
   {
   	switch(g_ucGameKeyControlStatus)
   		{
		case GK_GameKeyDown://for change block
   				Set_GameBlockFastDownFlag();
   				g_uwGameMsCounter=GameFastTick;
   			break;
   		case GK_GameKeyTurn://for change block
   				g_GameNowBlock=Game_change(g_GameNowBlock);
   				Game_draw_block(g_GameNowBlock);
   				if(Game_check_bottom(g_GameNowBlock))
   					{
   						if(Game_del_line(g_GameNowBlock.y))
   							{Game_draw_score();}
   						Game_draw_grid(g_GameNowBlock);
						GameOverCheck();
   					}
   			break;
   		case GK_GameKeyLeft:
   			if(!Game_check_lborder(g_GameNowBlock)&&!Game_check_bottom(g_GameNowBlock))
   				{
   					Game_clear_block(g_GameNowBlock);
   					g_GameNowBlock.x-=1;
   					Game_draw_block(g_GameNowBlock);
   				}
   			break;
   		case GK_GameKeyRight:
   			if(!Game_check_rborder(g_GameNowBlock)&&!Game_check_bottom(g_GameNowBlock))
   				{
   					Game_clear_block(g_GameNowBlock);
   					g_GameNowBlock.x+=1;
   					Game_draw_block(g_GameNowBlock);
   				}
   			break;
   		default:
   			break;
   		}
	g_ucGameKeyControlStatus=GK_GameKeyNop;
   }

   if (GameBlockDownFlag)
   {
   	Clr_GameBlockDownFlag() ;
   if(!Game_check_bottom(g_GameNowBlock))
   	{

   		Game_clear_block(g_GameNowBlock);
   		g_GameNowBlock.y+=1;
   		Game_draw_block(g_GameNowBlock);
   	}
   else
   	{
   		if(Game_del_line(g_GameNowBlock.y))
   			{
   				Game_draw_score();
   			}
   		Game_draw_grid(g_GameNowBlock);
		GameOverCheck();
   	}
   }
}

void GameHandle(void)
{
  if (!g_bGameEnable)
  	return;
  switch(g_ucGameStatus)
  	{
  	case GS_GameRunning:
		Gameprocess();
		break;
	case GS_GameReStart:
		Game_Start();
		break;
	case GS_GameExit:
	       Osd_Hide();
	       g_ucMenuPageIndex=RootMenu;
		g_ucMenuItemIndex=0;
		g_bGameEnable=0;
		Set_InputTimingChangeFlag();
		break;
	case GS_GameStop:
		break;
  	}
}

#endif

⌨️ 快捷键说明

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