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

📄 fep_game_window.c

📁 俄罗斯方块程序,对你开发移植这个游戏有很大帮助!
💻 C
📖 第 1 页 / 共 2 页
字号:
				{

					LANGUAGE_ITEM_RESTART,
					LANGUAGE_ITEM_SET_LEVEL,//
					LANGUAGE_ITEM_BACKGROUND_MUSIC,
					LANGUAGE_ITEM_CANCEL,
					(uint32_t)NULL               
				};
				uint8_t ListNum=4,ItemHeight=JPEG_BITMAPSTINGLIST_ITEM_HEIGHT;
				

					//	set the in sub window flag
					pGameBrickWidget->bInSubWindow = 1;
					//	stop the game
					pGameBrickWidget->Pause = 1;
					uim_widget_SetProperty((Widget_t *)pGameBrickWidget,WIDGET_PROPERTY_HEARTBEAT, 0);  // set its heartbeat timeout field


				rtnStat = uim_widget_Create(&pNewWidget,WIDGET_CLASS_BITMAPSTRINGIDLIST,
					0,
					
					gfx_rect_Make(SUB_WINDOW_X,
					SUB_WINDOW_Y,
					160,
					(ListNum+1)*ItemHeight ),
					PopUpList,LANGUAGE_ITEM_GAME_OPTION , TXT_STRING_TYPE_UTF16,ListNum,
					RSRC_POPUP_HEAD_BG_BMP,
					RSRC_POPUP_LIST_BG_BMP,
					RSRC_POPUP_LIST_BG_HL_BMP,ItemHeight);//"Photo Option"
				
				if(rtnStat != SUCCESS)
					break;

				uim_widget_SetProperty(pNewWidget,WIDGET_PROPERTY_STRINGLIST_DRAW_COLOR,COLOR_BLACK);
				uim_widget_SetProperty(pNewWidget,WIDGET_PROPERTY_STRINGLIST_TITLE_TEXT_COLOR,COLOR_WHITE);
				uim_widget_SetProperty(pNewWidget,WIDGET_PROPERTY_STRINGLIST_HIGHLIGHT_TEXT_COLOR,COLOR_BLACK);
				uim_widget_SetProperty(pNewWidget,WIDGET_PROPERTY_STRINGLIST_TITLE_FONT,gfx_font_GetSystemFont());
				uim_widget_SetProperty(pNewWidget,WIDGET_PROPERTY_STRINGLIST_LIST_FONT,gfx_font_GetSystemFont());
				uim_widget_SetProperty(pNewWidget,WIDGET_PROPERTY_MESSAGE_MASK,OS_MSG_UI_GROUP);
				uim_widget_Attach((Widget_t*)pWidget,(Widget_t*)pNewWidget);
				// show the option widget (window)

				i32PopUp = uim_DoModal(pNewWidget);

					switch (i32PopUp)
					{
						case 0:
							fep_window_Game_Init(pWidget);
							break;
						case 1:
							{
					
								const wchar_t *PopUpLevelList[]=
								{
									L"1",      // [0]
									L"2", 
									L"3", 
									L"4", 
									L"5",
									L"6",
									L"7",
									L"8",
									L"9",
									L"10",
									NULL 
								};
								
								rtnStat = uim_widget_Create(&pNewWidget2,WIDGET_CLASS_BITMAPSTRINGLIST, 0,
												gfx_rect_Make(SUB_WINDOW2_X,SUB_WINDOW2_Y,SUB_WINDOW2_DX,SUB_WINDOW2_DY),
												PopUpLevelList, L"1--10",
								    TXT_STRING_TYPE_UTF16,
									5,
									RSRC_POPUP_HEAD_BG_BMP,
									RSRC_POPUP_LIST_BG_BMP,
									RSRC_POPUP_LIST_BG_HL_BMP,ItemHeight
									);
								if(rtnStat != SUCCESS)  
									break;
								uim_widget_SetProperty(pNewWidget2,WIDGET_PROPERTY_STRINGLIST_BG_COLOR,g_UIColorTable[COLOR_IDX_BODY_BACKGROUND]);
								uim_widget_SetProperty(pNewWidget2,WIDGET_PROPERTY_STRINGLIST_DRAW_COLOR,g_UIColorTable[COLOR_IDX_BODY_TEXT]);
								uim_widget_SetProperty(pNewWidget2,WIDGET_PROPERTY_STRINGLIST_TITLE_TEXT_COLOR,g_UIColorTable[COLOR_IDX_TITLE_TEXT]);
								uim_widget_SetProperty(pNewWidget2,WIDGET_PROPERTY_STRINGLIST_TITLE_BACKGROUND_COLOR,g_UIColorTable[COLOR_IDX_TITLE_BACKGROUND]);
			            
								uim_widget_SetProperty(pNewWidget2,WIDGET_PROPERTY_STRINGLIST_HIGHLIGHT_TEXT_COLOR,g_UIColorTable[COLOR_IDX_HIGHLIGHT_TEXT]);
								uim_widget_SetProperty(pNewWidget2,WIDGET_PROPERTY_STRINGLIST_HIGHLIGHT_BG_COLOR_1,g_UIColorTable[COLOR_IDX_HIGHLIGHT_BG_1]);
								uim_widget_SetProperty(pNewWidget2,WIDGET_PROPERTY_STRINGLIST_HIGHLIGHT_BG_COLOR_2,g_UIColorTable[COLOR_IDX_HIGHLIGHT_BG_2]);
								uim_widget_SetProperty(pNewWidget2,WIDGET_PROPERTY_MESSAGE_MASK,OS_MSG_UI_GROUP);
								uim_widget_Attach((Widget_t*)pWidget,(Widget_t*)pNewWidget2);

								// show the level option widget (window)
								i32PopUpLevel = uim_DoModal(pNewWidget2);
								if(i32PopUpLevel >= 0)
								{
									pGameBrickWidget->Level = i32PopUpLevel+1;
								}
								
								
								uim_widget_Detach(pNewWidget2);
								uim_widget_Destroy(pNewWidget2);
							}
							break;
					
					
						case 2:


#ifndef WIN32
						    
						    if( (g_eAsmMode != ASM_MODE_TUNER) && (g_eAsmState != DECODER_STATE_PLAY) )

						    {
							if( pGameBrickWidget->bMusicOn == false )
							{
							    
							    resource_playback(RSRC_RI0002_WAV,GAIN_0dB,RSPB_REPEAT);
							    pGameBrickWidget->bMusicOn = true;
							}
							else
							{
							     rs_playback.state = RSPB_END;
							     pGameBrickWidget->bMusicOn = false;
							}
						    }
#endif
							break;
						case 3:
							//	quit to upper menu
#ifndef WIN32						    
							if( pGameBrickWidget->bMusicOn == true )
							{
								rs_playback.state = RSPB_END;
								pGameBrickWidget->bMusicOn = false;
							}
#endif

							

							BUILD_NONALLOCATED_MSG(&msg, OS_MSG_UI_GROUP, MSG_UI_BTN_EVENT,(BTN_MENU<<MSG_BTN_ID_SHIFT)|EVENT_CLICK);


							tx_queue_send(g_ptx_queue_ui, &msg, TX_NO_WAIT);
							iRtn= WIDGET_PROCESS_MSG_HANDLED_AND_END_MODAL;
							break;
					}

					//	set the in sub window flag
					pGameBrickWidget->bInSubWindow = 0;
					
					if(pGameBrickWidget->Dead)
					{
						fep_window_Game_Init(pWidget);
						pGameBrickWidget->Level = i32PopUpLevel+1;

					}
					pGameBrickWidget->Pause = 0;
					uim_widget_SetProperty((Widget_t *)pGameBrickWidget,WIDGET_PROPERTY_HEARTBEAT, u8LevelToHeartBeat[pGameBrickWidget->Level]);  // set its heartbeat timeout field
					uim_widget_Detach(pNewWidget);
					uim_widget_Destroy(pNewWidget);

				}
				
				break;
			default:
					break;

		}
		break;


    case UIM_MSG_CREATE:

		
		pGameBrickWidget->bInSubWindow = 0;
		
		pGameBrickWidget->bMusicOn = false;

        fep_window_Game_Init(pWidget);

		uim_widget_RegisterWidget(pWidget);

        iRtn = WIDGET_PROCESS_MSG_HANDLED;
        break;

    case UIM_MSG_DESTROY:
#ifndef WIN32
	if( pGameBrickWidget->bMusicOn == true )
	{
	     rs_playback.state = RSPB_END;
	     pGameBrickWidget->bMusicOn = false;
	}
#endif
        uim_widget_UnregisterWidget((Widget_t *)pGameBrickWidget);
        iRtn = WIDGET_PROCESS_MSG_HANDLED;
        break;

    }

    return iRtn;
}

///////////////////////////////////////////////////////////////////////////////
//! \brief This function is heartbeat handler of JPEG widget.
//!
//! \param[in] pWidget          The pointer to JPEG widget.
///////////////////////////////////////////////////////////////////////////////

void fep_window_Game_HeartBeat(Widget_t *pWidget)
{
    GameBrickWidget_t *pGameBrickWidget = (GameBrickWidget_t *)pWidget;

	//FourBrick widget down1
	//check if it is active
	if(pGameBrickWidget->Active )
	{
		fep_window_Game_Clear4Bricks(pGameBrickWidget);
		pGameBrickWidget->FourBrick_Y++;
		if( fep_window_Game_Set4Bricks(pGameBrickWidget) )
		{
			pGameBrickWidget->FourBrick_Y--;
			fep_window_Game_Set4Bricks(pGameBrickWidget);
			pGameBrickWidget->Active = 0;
		}
		uim_widget_MarkRectForUpdate((Widget_t *)pGameBrickWidget,NULL);   // update the entire container area
	}
	else
	{
		//Random Create FourBrick widget
		fep_window_Game_New4Bricks(pGameBrickWidget);
		if( fep_window_Game_Set4Bricks(pGameBrickWidget) )
		{
		    uim_widget_SetProperty(pWidget,WIDGET_PROPERTY_HEARTBEAT, 0);  // set its heartbeat timeout field
			pGameBrickWidget->Dead=1;
		}
		
		uim_widget_MarkRectForUpdate((Widget_t *)pGameBrickWidget,NULL);   // update the entire container area
	}

    return;
}



///////////////////////////////////////////////////////////////////////////////
//! \brief This function is draw handler of JPEG widget.
//!
//! \param[in] pWidget     The pointer to JPEG widget.
//! \param[in] pDC         The graphics device context handle.
///////////////////////////////////////////////////////////////////////////////

void fep_window_Game_Draw(Widget_t *pWidget, gfx_DeviceContext_t *pDC)
{
	uint8_t i,j;
	uint8_t k,l,m;
	gfx_Rect_t rect1;
        gfx_Color_t oldBGColor, oldFGColor;

	uint16_t GameLevel=LANGUAGE_ITEM_LEVEL;
    uint16_t GameScore=LANGUAGE_ITEM_SCORE;
    uint16_t GamePause=LANGUAGE_ITEM_PAUSE;
    uint16_t GameDead=LANGUAGE_ITEM_GAME_OVER;
    char TempArray[12] = "";    //used to store a converted number

    GameBrickWidget_t *pGameBrickWidget = (GameBrickWidget_t *)pWidget;
	
    
	for(i=0;i<MAIN_BG_NUM;i++)
	{
		gfx_bmp_DrawBitmap(pDC,
			RSRC_MAIN_BG_R1_C1_BMP+i,
			0,
			i*MAIN_BG_HEIGHT
			);
	}
	oldBGColor = gfx_2d_SetBackgroundColor(pDC,RGBA(0,0,255,0));
        oldFGColor = gfx_2d_SetDrawColor(pDC,COLOR_RED);


	//backgournd
	rect1.x = GAME_STARTX;
	rect1.y = GAME_STARTY;
	rect1.width = BG_DX;
	rect1.height = BG_DY;
	gfx_2d_FillRect(pDC,&rect1,COLOR_BLUE);
	
	if( pGameBrickWidget->Active == 0)
	{
		//kill the full line
		m=15;
		do
		{
			k=1;
			l=0;
			for(j=1; j<11; j++)
			{
				k &= pGameBrickWidget->BrickGrid[m][j]; 
				l |= pGameBrickWidget->BrickGrid[m][j];
			}
		
			if( k==1)
			{
				//kill the line
				for(i=m; i>1;i--)
				{
					for(j=1; j<11; j++)
					{
						pGameBrickWidget->BrickGrid[i][j] = pGameBrickWidget->BrickGrid[i-1][j];
						uim_widget_SetProperty(pWidget,WIDGET_PROPERTY_HEARTBEAT, u8LevelToHeartBeat[pGameBrickWidget->Level]); 
					}
				}
				pGameBrickWidget->Score +=10 ;
				if(	pGameBrickWidget->Score > (11-pGameBrickWidget->Level)*200 )
				{
					if( pGameBrickWidget->Level >2) ;
					{
						pGameBrickWidget->Level -- ;
					}
				}
			}
			else
			{
				m--;
			}
		}
		while(l && m>1);
	}


	for(i=1; i<16; i++)
	{
		for(j=1; j<11; j++)
		{
			if(pGameBrickWidget->BrickGrid[i][j])
			{
			    gfx_bmp_DrawBitmap(pDC, RSRC_BRICK_JPG, GAME_STARTX+(j-1)*BRICK_DX, GAME_STARTY+(i-1)*BRICK_DY);
			}
		}
	}

	//	draw next brisk
	for(i=0; i<4; i++)
	{
		for(j=0; j<4; j++)
		{
			if(pGameBrickWidget->NextBrickGrid[i][j] == 1)
			{
			    gfx_bmp_DrawBitmap(pDC, RSRC_BRICK_JPG, BRISK_NEXT_X+j*BRICK_DX, BRISK_NEXT_Y+i*BRICK_DY);
			}
		}
	}

    //Display the Level and score
    
	gfx_rsrc_DrawString(pDC,GameLevel,STRING_GAMELEVEL_X_POS,STRING_GAMELEVEL_Y_POS);
    itos(TempArray,pGameBrickWidget->Level);
    gfx_text_DrawString(pDC,STRING_GAMELEVEL_X_POS,STRING_GAMELEVEL_Y_POS+FONT_HEIGHT, TXT_STRING_TYPE_DBCS, TempArray,0);

    gfx_rsrc_DrawString(pDC,GameScore,STRING_GAMESCORE_X_POS,STRING_GAMESCORE_Y_POS);
    itos(TempArray,pGameBrickWidget->Score);
    gfx_text_DrawString(pDC,STRING_GAMESCORE_X_POS,STRING_GAMESCORE_Y_POS+FONT_HEIGHT, TXT_STRING_TYPE_DBCS, TempArray,0);

		
	if( pGameBrickWidget->Dead )
	{
		gfx_2d_SetDrawColor(pDC,COLOR_RED);
	    gfx_rsrc_DrawString(pDC,GameDead,STRING_GAMEPAUSE_X_POS,STRING_GAMEPAUSE_Y_POS);
	}

	else if( pGameBrickWidget->Pause )
	{
		gfx_2d_SetDrawColor(pDC,COLOR_RED);
		gfx_rsrc_DrawString(pDC,GamePause,STRING_GAMEPAUSE_X_POS,STRING_GAMEPAUSE_Y_POS);
	}


    //restore the forground and Background colors
    gfx_2d_SetBackgroundColor(pDC,oldBGColor);
    gfx_2d_SetDrawColor(pDC,oldFGColor);
    return;
}


//! @}

⌨️ 快捷键说明

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