📄 display.c
字号:
/***************************************************************************/
/* */
/* Display.c */
/* */
/* Display functions for eluosi game. */
/* */
/* */
/***************************************************************************/
#include "PushBox.h"
#include "Display.h"
/*****************************全局函数定义************************************/
/*===========================================================================
FUNCTION PushBox_MainMenu
DESCRIPTION:
Display main menu.
PARAMETERS:
None.
RETURN VALUE
None.
===========================================================================*/
void PushBox_MainMenu(PushBox* pMe)
{
IMENUCTL_SetRect(pMe->m_pMenu, &pMe->ScreenRect);
IMENUCTL_SetTitle(pMe->m_pMenu, PUSHBOX_RES_FILE,IDS_STRING_TITLE,NULL);
/*
#if 0
Item.pText = NULL;
Item.pImage = NULL;
Item.pszResImage = Item.pszResText = PUSHBOX_RES_FILE;
Item.wFont = AEE_FONT_NORMAL;
Item.dwData = 0;
// Start
Item.wText = IDS_STRING_START;
Item.wImage = IDI_OBJECT_START;
Item.wItemID = IDC_MAIN_MENU_START;
IMENUCTL_AddItemEx(pMe->m_pMenu, &Item);
// Help
Item.wText = IDS_STRING_HELP;
Item.wImage = IDI_OBJECT_HELP;
Item.wItemID = IDC_MAIN_MENU_HELP;
IMENUCTL_AddItemEx(pMe->m_pMenu, &Item);
// Quit
Item.wText = IDS_STRING_QUIT;
Item.wImage = IDI_OBJECT_QUIT;
Item.wItemID = IDC_MAIN_MENU_QUIT;
IMENUCTL_AddItemEx(pMe->m_pMenu, &Item);
#endif
*/
IMENUCTL_SetActive(pMe->m_pMenu,TRUE);
IMENUCTL_EnableCommand(pMe->m_pMenu, TRUE);
IMENUCTL_Redraw(pMe->m_pMenu);
IDISPLAY_Update (pMe->a.m_pIDisplay);
}
/*===========================================================================
FUNCTION PushBox_GameMapInit
DESCRIPTION:
Display game map.
PARAMETERS:
None.
RETURN VALUE
None.
===========================================================================*/
void PushBox_GameArrayInit(PushBox * pApp)
{
int i=0;
int j=0;
pApp->People_dx=1;
pApp->People_dy=1;
for(i = 0; i < ROWNUM; i++)
{
for(j = 1;j < COLNUM;j++)
{
pApp->BoxStatus[i][j]=SafeWay;
}
}
for(i = 0; i < ROWNUM; i++)
{
pApp->BoxStatus[i][0]=BlockBox;
pApp->BoxStatus[i][7]=BlockBox;
}
for(j = 1;j < COLNUM-1;j++)
{
pApp->BoxStatus[0][j]=BlockBox;
pApp->BoxStatus[7][j]=BlockBox;
}
pApp->BoxStatus[5][1]=BlockBox;
pApp->BoxStatus[6][1]=BlockBox;
pApp->BoxStatus[6][2]=BlockBox;
pApp->BoxStatus[5][2]=BlockBox;
pApp->BoxStatus[2][2]=MoveBox;
pApp->BoxStatus[3][2]=MoveBox;
// pApp->BoxStatus[1][2]=MoveBox;
pApp->BoxStatus[4][4]=DesBox;
pApp->BoxStatus[5][4]=DesBox;
pApp->BoxStatus[1][1]=People;
}
void PushBox_GameMapDraw(PushBox * pApp ,int x ,int y ,RGBVAL clrFill)
{
AEERect rc;
RGBVAL clr = clrFill;
int i = x;
int j = y;
pApp->x = INITLEFT + i * COLWIDTH;
pApp->y = INITTOP + j * ROWHEIGHT;
SETAEERECT(&rc,pApp->x,pApp->y,COLWIDTH,ROWHEIGHT);
IDISPLAY_DrawRect(pApp->a.m_pIDisplay,&rc,0xff000000,clr,IDF_RECT_FRAME|IDF_RECT_FILL);
}
void PushBox_GamePeopleDraw(PushBox * pApp,int x ,int y)
{
IImage * pImage;
int i = x;
int j = y;
pApp->x = INITLEFT + i * COLWIDTH;
pApp->y = INITTOP + j * ROWHEIGHT;
pImage = ISHELL_LoadResImage(pApp->a.m_pIShell, PUSHBOX_RES_FILE ,
IDI_OBJECT_TEST);
if (NULL != pImage)
{
IIMAGE_SetDrawSize(pImage, COLWIDTH, ROWHEIGHT);
IIMAGE_Draw(pImage, pApp->x, pApp->y);
IIMAGE_Release(pImage);
pImage = NULL;
}
}
void PushBox_GameMapInit(PushBox * pApp)
{
int i=0;
int j=0;
pApp->BoxSum = 0;
PushBox_GameArrayInit(pApp);
for(i = 0;i < ROWNUM;i++)
{
for(j = 0;j < COLNUM;j++)
{
if (SafeWay==pApp->BoxStatus[i][j])
PushBox_GameMapDraw(pApp,i,j,WHITE);
if (BlockBox==pApp->BoxStatus[i][j])
PushBox_GameMapDraw(pApp,i,j,Black);
if (MoveBox==pApp->BoxStatus[i][j])
PushBox_GameMapDraw(pApp,i,j,Green);
if (DesBox==pApp->BoxStatus[i][j])
PushBox_GameMapDraw(pApp,i,j,Red);
if (People==pApp->BoxStatus[i][j])
PushBox_GamePeopleDraw(pApp,i ,j);
}
}
IDISPLAY_Update (pApp->a.m_pIDisplay);
}
/*===========================================================================
FUNCTION PushBox_MoveUpBox.....
DESCRIPTION:
the function of box move.
===========================================================================*/
void PushBox_MoveUpBox(PushBox * pApp)
{
int i = pApp->People_dx; //the start position of the people
int j = pApp->People_dy;
if ((BlockBox==pApp->BoxStatus[i][j-1])||(DesBox==pApp->BoxStatus[i][j-1])||
((MoveBox==pApp->BoxStatus[i][j-1])&&(BlockBox==pApp->BoxStatus[i][j-2]))||
((MoveBox==pApp->BoxStatus[i][j-1])&&(MoveBox==pApp->BoxStatus[i][j-2])))
{
return;
}
if (SafeWay==pApp->BoxStatus[i][j-1])
{
pApp->People_dy = j-1;
pApp->BoxStatus[i][j] = SafeWay;
PushBox_GameMapDraw(pApp,i,j,WHITE);
PushBox_GamePeopleDraw(pApp,i ,j-1);
}
if((MoveBox==pApp->BoxStatus[i][j-1])&&(SafeWay==pApp->BoxStatus[i][j-2]))
{
pApp->People_dy = j-1;
pApp->BoxStatus[i][j] = SafeWay;
PushBox_GameMapDraw(pApp,i,j,WHITE);
PushBox_GameMapDraw(pApp,i,j-2,Green);
PushBox_GamePeopleDraw(pApp,i ,j-1);
pApp->BoxStatus[i][j-2] = MoveBox;
}
if ((MoveBox==pApp->BoxStatus[i][j-1])&&(DesBox==pApp->BoxStatus[i][j-2]))
{
pApp->BoxSum += 1;
pApp->People_dy = j-1;
pApp->BoxStatus[i][j] = SafeWay;
PushBox_GameMapDraw(pApp,i,j,WHITE);
PushBox_GameMapDraw(pApp,i,j-2,Black);
PushBox_GamePeopleDraw(pApp,i ,j-1);
}
IDISPLAY_Update (pApp->a.m_pIDisplay);
}
void PushBox_MoveDownBox(PushBox * pApp)
{
int i = pApp->People_dx; //the start position of the people
int j = pApp->People_dy;
if ((BlockBox==pApp->BoxStatus[i][j+1])||(DesBox==pApp->BoxStatus[i][j+1])||
((MoveBox==pApp->BoxStatus[i][j+1])&&(BlockBox==pApp->BoxStatus[i][j+2]))||
((MoveBox==pApp->BoxStatus[i][j+1])&&(MoveBox==pApp->BoxStatus[i][j+2])))
{
return;
}
if (SafeWay==pApp->BoxStatus[i][j+1])
{
pApp->People_dy = j+1;
pApp->BoxStatus[i][j] = SafeWay;
PushBox_GameMapDraw(pApp,i,j,WHITE);
PushBox_GamePeopleDraw(pApp,i ,j+1);
}
if((MoveBox==pApp->BoxStatus[i][j+1])&&(SafeWay==pApp->BoxStatus[i][j+2]))
{
pApp->People_dy = j+1;
pApp->BoxStatus[i][j] = SafeWay;
PushBox_GameMapDraw(pApp,i,j,WHITE);
PushBox_GameMapDraw(pApp,i,j+2,Green);
PushBox_GamePeopleDraw(pApp,i ,j+1);
pApp->BoxStatus[i][j+2] = MoveBox;
}
if ((MoveBox==pApp->BoxStatus[i][j+1])&&(DesBox==pApp->BoxStatus[i][j+2]))
{
pApp->BoxSum += 1;
pApp->People_dy = j+1;
pApp->BoxStatus[i][j] = SafeWay;
PushBox_GameMapDraw(pApp,i,j,WHITE);
PushBox_GameMapDraw(pApp,i,j+2,Black);
PushBox_GamePeopleDraw(pApp,i ,j+1);
}
IDISPLAY_Update (pApp->a.m_pIDisplay);
}
void PushBox_MoveLeftBox(PushBox * pApp)
{
int i = pApp->People_dx; //the start position of the people
int j = pApp->People_dy;
if ((BlockBox==pApp->BoxStatus[i-1][j])||(DesBox==pApp->BoxStatus[i-1][j])||
((MoveBox==pApp->BoxStatus[i-1][j])&&(BlockBox==pApp->BoxStatus[i-2][j]))||
((MoveBox==pApp->BoxStatus[i-1][j])&&(MoveBox==pApp->BoxStatus[i-2][j])))
{
return;
}
if (SafeWay==pApp->BoxStatus[i-1][j])
{
pApp->People_dx = i-1;
pApp->BoxStatus[i][j] = SafeWay;
PushBox_GameMapDraw(pApp,i,j,WHITE);
if(MoveBox==pApp->BoxStatus[i-1][j])
PushBox_GameMapDraw(pApp,i-2,j,Green);
PushBox_GamePeopleDraw(pApp,i-1 ,j);
}
if((MoveBox==pApp->BoxStatus[i-1][j])&&(SafeWay==pApp->BoxStatus[i-2][j]))
{
pApp->People_dx = i-1;
pApp->BoxStatus[i][j] = SafeWay;
PushBox_GameMapDraw(pApp,i,j,WHITE);
PushBox_GameMapDraw(pApp,i-2,j,Green);
PushBox_GamePeopleDraw(pApp,i-1 ,j);
pApp->BoxStatus[i-2][j] = MoveBox;
}
if ((MoveBox==pApp->BoxStatus[i-1][j])&&(DesBox==pApp->BoxStatus[i-2][j]))
{
pApp->BoxSum += 1;
pApp->People_dx = i-1;
pApp->BoxStatus[i][j] = SafeWay;
PushBox_GameMapDraw(pApp,i,j,WHITE);
PushBox_GameMapDraw(pApp,i-2,j,Black);
PushBox_GamePeopleDraw(pApp,i-1 ,j);
}
IDISPLAY_Update (pApp->a.m_pIDisplay);
}
void PushBox_MoveRightBox(PushBox * pApp)
{
int i = pApp->People_dx; //the start position of the people
int j = pApp->People_dy;
if ((BlockBox==pApp->BoxStatus[i+1][j]) || (DesBox==pApp->BoxStatus[i+1][j]) ||
((MoveBox==pApp->BoxStatus[i+1][j]) && (BlockBox==pApp->BoxStatus[i+2][j])) ||
((MoveBox==pApp->BoxStatus[i+1][j]) && (MoveBox==pApp->BoxStatus[i+2][j])))
{
return;
}
if (SafeWay==pApp->BoxStatus[i+1][j])
{
pApp->People_dx = i+1;
pApp->BoxStatus[i][j] = SafeWay;
PushBox_GameMapDraw(pApp,i,j,WHITE);
PushBox_GamePeopleDraw(pApp,i+1 ,j);
}
if((MoveBox==pApp->BoxStatus[i+1][j])&&(SafeWay==pApp->BoxStatus[i+2][j]))
{
pApp->People_dx = i+1;
pApp->BoxStatus[i][j] = SafeWay;
PushBox_GameMapDraw(pApp,i,j,WHITE);
PushBox_GameMapDraw(pApp,i+2,j,Green);
PushBox_GamePeopleDraw(pApp,i+1 ,j);
pApp->BoxStatus[i+2][j] = MoveBox;
}
if ((MoveBox==pApp->BoxStatus[i+1][j])&&(DesBox==pApp->BoxStatus[i+2][j]))
{
pApp->BoxSum += 1;
pApp->People_dx = i+1;
pApp->BoxStatus[i][j] = SafeWay;
PushBox_GameMapDraw(pApp,i,j,WHITE);
PushBox_GameMapDraw(pApp,i+2,j,Black);
PushBox_GamePeopleDraw(pApp,i+1 ,j);
}
IDISPLAY_Update (pApp->a.m_pIDisplay);
}
/*===========================================================================
FUNCTION PushBox_GameDialog_HandleEvent
DESCRIPTION:
the dialog of the game runing.
===========================================================================*/
boolean PushBox_GameDialog_HandleEvent(PushBox * pApp, AEEEvent evt, uint16 wParam, uint32 dwParam)
{// int nRet;
int CDsuccess=0;
uint16 w = wParam;
// AECHAR pBuf[60]={'G','a','m','e',' ','O', 'v', 'e', 'r', '\0'};
switch (evt)
{
case EVT_DIALOG_START:
PushBox_GameMapInit(pApp);
pApp->GameState = GameRuning;
return TRUE;
case EVT_DIALOG_END: // nothing to do at present
return TRUE;
case EVT_KEY_PRESS:
switch (wParam)
{
case AVK_UP:
PushBox_MoveUpBox(pApp);
return TRUE;
case AVK_DOWN:
PushBox_MoveDownBox(pApp);
return TRUE;
case AVK_LEFT:
PushBox_MoveLeftBox(pApp);
return TRUE;
case AVK_RIGHT:
PushBox_MoveRightBox(pApp);
return TRUE;
default:
break;
}
return FALSE;
case EVT_KEY:
switch (wParam)
{
case AVK_CLR:
ISHELL_EndDialog(pApp->a.m_pIShell);
pApp->m_pGameDialog = NULL;
pApp->GameState = GameEnd;
return TRUE;
default:
break;
}
return FALSE;
default:
return FALSE;
}
return FALSE;
}
/*===========================================================================
FUNCTION PushBox_MenuDialog_HandleEvent
DESCRIPTION:
the handle event function of the menu dialog.
===========================================================================*/
boolean PushBox_MenuDialog_HandleEvent(PushBox * pApp, AEEEvent evt, uint16 wParam, uint32 dwParam)
{
int nRet;
int CDsuccess=0;
switch (evt)
{
case EVT_DIALOG_START:
pApp->m_pMenu = (IMenuCtl *)IDIALOG_GetControl(pApp->m_pMenuDialog,IDC_MENU_MAIN);
PushBox_MainMenu(pApp);
return TRUE;
case EVT_DIALOG_END:
// IDISPLAY_Update(pApp->a.m_pIDisplay);
return TRUE;
case EVT_KEY:
switch (wParam)
{
case AVK_CLR:
ISHELL_EndDialog(pApp->a.m_pIShell);
pApp->m_pMenuDialog = NULL;
ISHELL_CloseApplet(pApp->a.m_pIShell, FALSE);
return(TRUE);
case AVK_SELECT:
return(TRUE);
case AVK_UP:
case AVK_DOWN:
//active the menu control.
IMENUCTL_HandleEvent(pApp->m_pMenu, evt, wParam, dwParam);
return TRUE;
default:
break;
}
return FALSE;
case EVT_COMMAND:
switch(wParam)
{
case IDS_STRING_START: // User selected 'START' from the Main Menu
IMENUCTL_SetActive(pApp->m_pMenu,FALSE);
IDISPLAY_ClearScreen(pApp->a.m_pIDisplay);
nRet = ISHELL_CreateDialog(pApp->a.m_pIShell, PUSHBOX_RES_FILE , IDD_DIALOG_GAME, NULL);
if(CDsuccess == nRet) ///创建对话框接口
{
pApp->GameState = GameRuning;
return TRUE;
}
else
return FALSE;
return TRUE;
/*
case IDS_STRING_HELP: // User pressed the 'HELP' button
IMENUCTL_SetActive(pMe->pMenu, FALSE);
IDISPLAY_ClearScreen(pMe->a.m_pIDisplay);
Eluos_Display_Text (ELUOS_HELP_FILE);
return TRUE;
*/
case IDS_STRING_QUIT: // User pressed the 'QUIT' button
ISHELL_CloseApplet(pApp->a.m_pIShell,FALSE);
return TRUE;
default:
break;
}
return FALSE;
default:
return FALSE;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -