📄 fep_game_window.c
字号:
{
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 + -