📄 gamedemo.c
字号:
}
IDISPLAY_Update(pMe->pIDisplay);
}
boolean GameDemo_InitAppData(GameDemo* pMe)
{
int nAscent;
int nDescent;
pMe->DeviceInfo.wStructSize = sizeof(pMe->DeviceInfo);
ISHELL_GetDeviceInfo(pMe->a.m_pIShell,&pMe->DeviceInfo);
pMe->pIDisplay = pMe->a.m_pIDisplay;
pMe->pIShell = pMe->a.m_pIShell;
pMe->m_nFontHeight = IDISPLAY_GetFontMetrics(pMe->pIDisplay,AEE_FONT_NORMAL,&nAscent,&nDescent);
CALLBACK_Init(&pMe->m_cbMainTimer,MainLoop,pMe);
pMe->m_bVolOn = TRUE;
PlayBgMedia(pMe);
return TRUE;
}
void GameDemo_FreeAppData(GameDemo* pMe)
{
if(pMe->m_pIMedia)
{
IMEDIA_Stop(pMe->m_pIMedia);
IMEDIA_RegisterNotify(pMe->m_pIMedia,NULL,NULL);
IMEDIA_Release(pMe->m_pIMedia);
}
MainGameFree(pMe);
}
void DrawTextById(GameDemo *pMe,int16 nResID,int x,int y,RGBVAL rgb)
{
uint32 bufferSize;
AECHAR *pText;
ISHELL_GetResSize(pMe->pIShell,RES_FILE,nResID,RESTYPE_STRING,&bufferSize);
pText =(AECHAR*)MALLOC(bufferSize);
ISHELL_LoadResString(pMe->pIShell,RES_FILE,nResID,pText,bufferSize);
DrawTextByBuffer(pMe,pText,x,y,rgb);
FREE(pText);
}
void DrawTextByBuffer(GameDemo *pMe,const AECHAR *pText,int x,int y,RGBVAL rgb)
{
IDISPLAY_SetColor(pMe->pIDisplay,CLR_USER_TEXT,rgb);
IDISPLAY_DrawText(pMe->pIDisplay,
AEE_FONT_NORMAL,
pText,
-1,
x,
y,
NULL,
IDF_TEXT_TRANSPARENT);
}
void DrawTextCenterById(GameDemo *pMe,int16 nResID,int y,RGBVAL rgb)
{
uint32 bufferSize;
AECHAR *pText;
ISHELL_GetResSize(pMe->pIShell,RES_FILE,nResID,RESTYPE_STRING,&bufferSize);
pText =(AECHAR*)MALLOC(bufferSize);
ISHELL_LoadResString(pMe->pIShell,RES_FILE,nResID,pText,bufferSize);
DrawTextCenterByBuffer(pMe,pText,y,rgb);
FREE(pText);
}
void DrawTextCenterByBuffer(GameDemo *pMe,const AECHAR *pText,int y,RGBVAL rgb)
{
int width = IDISPLAY_MeasureText(pMe->pIDisplay,AEE_FONT_NORMAL,pText);
DrawTextByBuffer(pMe,pText,(pMe->DeviceInfo.cxScreen-width)/2,y,rgb);
}
boolean MainMenuHandleEvent(GameDemo* pMe, AEEEvent eCode, uint16 wParam, uint32 dwParam)
{
switch(eCode)
{
case EVT_KEY:
if(wParam==AVK_CLR)
{
return FALSE;
}
break;
case EVT_KEY_PRESS:
switch(wParam)
{
case AVK_UP:
case AVK_2:
if(!(pMe->m_Menu.m_iKeyState&KEY_UP)&&!(pMe->m_Menu.m_iKeyState&KEY_UP_MASK))
{
pMe->m_Menu.m_iKeyState |= (KEY_UP|KEY_UP_MASK);
}
return TRUE;
case AVK_DOWN:
case AVK_8:
if(!(pMe->m_Menu.m_iKeyState&KEY_DOWN)&&!(pMe->m_Menu.m_iKeyState&KEY_DOWN_MASK))
{
pMe->m_Menu.m_iKeyState |= (KEY_DOWN|KEY_DOWN_MASK);
}
return TRUE;
case AVK_SELECT:
case AVK_5:
if(!(pMe->m_Menu.m_iKeyState&KEY_OK)&&!(pMe->m_Menu.m_iKeyState&KEY_OK_MASK))
{
pMe->m_Menu.m_iKeyState |= (KEY_OK|KEY_OK_MASK);
}
return TRUE;
}
break;
case EVT_KEY_RELEASE:
switch(wParam)
{
case AVK_UP:
case AVK_2:
pMe->m_Menu.m_iKeyState &=~KEY_UP;
return TRUE;
case AVK_DOWN:
case AVK_8:
pMe->m_Menu.m_iKeyState &=~KEY_DOWN;
return TRUE;
case AVK_SELECT:
case AVK_5:
pMe->m_Menu.m_iKeyState &=~KEY_OK;
return TRUE;
}
break;
}
return FALSE;
}
boolean MainGameHandleEvent(GameDemo* pMe, AEEEvent eCode, uint16 wParam, uint32 dwParam)
{
switch(eCode)
{
case EVT_KEY:
switch(wParam)
{
case AVK_CLR:
pMe->m_State = enMainMenu;
MainGameFree(pMe);
MainMenuInit(pMe);
return TRUE;
case AVK_POUND:
pMe->m_bIsSave = TRUE;
break;
}
break;
case EVT_KEY_PRESS:
switch(wParam)
{
case AVK_UP:
case AVK_2:
if(!(pMe->m_Game.m_MainSprite.m_iKeyState&KEY_UP)&&!(pMe->m_Game.m_MainSprite.m_iKeyState&KEY_UP_MASK))
{
pMe->m_Game.m_MainSprite.m_iKeyState |= (KEY_UP|KEY_UP_MASK);
pMe->m_Game.m_MainSprite.dy -= 15;
}
return TRUE;
case AVK_DOWN:
case AVK_8:
if(!(pMe->m_Game.m_MainSprite.m_iKeyState&KEY_DOWN)&&!(pMe->m_Game.m_MainSprite.m_iKeyState&KEY_DOWN_MASK))
{
pMe->m_Game.m_MainSprite.m_iKeyState |= (KEY_DOWN|KEY_DOWN_MASK);
}
return TRUE;
case AVK_SELECT:
case AVK_5:
if(!(pMe->m_Game.m_MainSprite.m_iKeyState&KEY_OK)&&!(pMe->m_Game.m_MainSprite.m_iKeyState&KEY_OK_MASK))
{
pMe->m_Game.m_MainSprite.m_iKeyState |= (KEY_OK|KEY_OK_MASK);
}
return TRUE;
case AVK_LEFT:
case AVK_4:
pMe->m_Game.m_MainSprite.m_iKeyState |= KEY_LEFT;
return TRUE;
case AVK_RIGHT:
case AVK_6:
pMe->m_Game.m_MainSprite.m_iKeyState |= KEY_RIGHT;
return TRUE;
}
break;
case EVT_KEY_RELEASE:
switch(wParam)
{
case AVK_UP:
case AVK_2:
pMe->m_Game.m_MainSprite.m_iKeyState &=~KEY_UP;
return TRUE;
case AVK_DOWN:
case AVK_8:
pMe->m_Game.m_MainSprite.m_iKeyState &=~KEY_DOWN;
return TRUE;
case AVK_SELECT:
case AVK_5:
pMe->m_Game.m_MainSprite.m_iKeyState &=~KEY_OK;
return TRUE;
case AVK_LEFT:
case AVK_4:
pMe->m_Game.m_MainSprite.m_iKeyState &= ~KEY_LEFT;
return TRUE;
case AVK_RIGHT:
case AVK_6:
pMe->m_Game.m_MainSprite.m_iKeyState &= ~KEY_RIGHT;
return TRUE;
}
break;
}
return FALSE;
}
void MainMenuAction(GameDemo *pMe)
{
switch(pMe->m_Menu.m_State)
{
case enMenuMain:
{
if(pMe->m_Menu.m_iKeyState&KEY_UP_MASK)
{
pMe->m_Menu.m_iKeyState &=~KEY_UP_MASK;
pMe->m_Menu.m_bUpdate = TRUE;
if(pMe->m_Menu.m_nWhichActive>0)
{
--pMe->m_Menu.m_nWhichActive;
}
else
{
pMe->m_Menu.m_nWhichActive = 4;
}
}
else if(pMe->m_Menu.m_iKeyState&KEY_DOWN_MASK)
{
pMe->m_Menu.m_iKeyState &=~KEY_DOWN_MASK;
pMe->m_Menu.m_bUpdate = TRUE;
if(pMe->m_Menu.m_nWhichActive<4)
{
++pMe->m_Menu.m_nWhichActive;
}
else
{
pMe->m_Menu.m_nWhichActive = 0;
}
}
else if(pMe->m_Menu.m_iKeyState&KEY_OK_MASK)
{
pMe->m_Menu.m_iKeyState &=~KEY_OK_MASK;
pMe->m_Menu.m_bUpdate = TRUE;
switch(pMe->m_Menu.m_nWhichActive)
{
case 0:
pMe->m_State = enMainGame;
MainGameInit(pMe);
if(pMe->m_pIMedia)
{
IMEDIA_Stop(pMe->m_pIMedia);
IMEDIA_RegisterNotify(pMe->m_pIMedia,NULL,NULL);
IMEDIA_Release(pMe->m_pIMedia);
pMe->m_pIMedia = NULL;
}
break;
case 1:
pMe->m_State = enMainGame;
MainGameInit(pMe);
LoadSaveData(pMe);
if(pMe->m_pIMedia)
{
IMEDIA_Stop(pMe->m_pIMedia);
IMEDIA_RegisterNotify(pMe->m_pIMedia,NULL,NULL);
IMEDIA_Release(pMe->m_pIMedia);
pMe->m_pIMedia = NULL;
}
break;
case 2:
break;
case 3:
pMe->m_bVolOn = !pMe->m_bVolOn;
if(pMe->m_bVolOn)
{
PlayBgMedia(pMe);
}
else
{
pMe->m_bIsContinue = FALSE;
if(pMe->m_pIMedia)
{
IMEDIA_Stop(pMe->m_pIMedia);
IMEDIA_RegisterNotify(pMe->m_pIMedia,NULL,NULL);
IMEDIA_Release(pMe->m_pIMedia);
pMe->m_pIMedia = NULL;
}
}
break;
case 4:
break;
}
}
}
break;
case enMenuHelp:
break;
}
}
void MainGameAction(GameDemo *pMe)
{
int i;
EnemyAction(pMe,pMe->m_Game.m_MoveSprites,6,2);
CheckBulletEnemyCollision(pMe);
CheckMainSpriteEnemyCollision(pMe);
pMe->m_Game.m_MainSprite.dy += 2;
CheckTileCollisionVertical(pMe);
pMe->m_Game.m_MainSprite.m_sprite[0].y += pMe->m_Game.m_MainSprite.dy;
if(pMe->m_Game.m_MainSprite.m_sprite[0].y + pMe->m_Game.m_MidMap.m_nY < 0)
{
pMe->m_Game.m_MainSprite.m_sprite[0].y = 0;
pMe->m_Game.m_MainSprite.dy = 0;
}
if (pMe->m_Game.m_MainSprite.m_sprite[0].y <= pMe->DeviceInfo.cyScreen / 4
||((pMe->m_Game.m_MidMap.m_nY !=pMe->m_Game.m_MidMap.m_nTileSize * pMe->m_Game.m_MidMap.m_nHeight-pMe->DeviceInfo.cyScreen)
&& pMe->m_Game.m_MainSprite.m_sprite[0].y >= pMe->DeviceInfo.cyScreen / 4)
)
{
pMe->m_Game.bgdy = (pMe->DeviceInfo.cyScreen / 4 - pMe->m_Game.m_MainSprite.m_sprite[0].y)/4;
if (pMe->m_Game.bgdy == 0 && pMe->DeviceInfo.cyScreen / 4 - pMe->m_Game.m_MainSprite.m_sprite[0].y > 0)
{
pMe->m_Game.bgdy = pMe->DeviceInfo.cyScreen / 4 - pMe->m_Game.m_MainSprite.m_sprite[0].y > 0 ? 1 : -1;
}
if (pMe->m_Game.bgdy -pMe->m_Game.m_MidMap.m_nY <
pMe->DeviceInfo.cyScreen -
pMe->m_Game.m_MidMap.m_nTileSize * pMe->m_Game.m_MidMap.m_nHeight)
{
pMe->m_Game.bgdy = pMe->DeviceInfo.cyScreen -
pMe->m_Game.m_MidMap.m_nTileSize * pMe->m_Game.m_MidMap.m_nHeight + pMe->m_Game.m_MidMap.m_nY;
}
if((pMe->m_Game.m_MidMap.m_nY <= 0) && pMe->m_Game.m_MainSprite.m_sprite[0].y < pMe->DeviceInfo.cyScreen / 4)
{
pMe->m_Game.m_MidMap.m_nY = 0;
pMe->m_Game.bgdy = 0;
}
}
else
{
pMe->m_Game.bgdy = 0;
}
if(pMe->m_Game.m_MainSprite.m_iKeyState&KEY_LEFT)
{
pMe->m_Game.m_MainSprite.m_bIsLeft = TRUE;
if(!CheckTileCollisionHorizon(pMe))
{
pMe->m_Game.m_MainSprite.m_sprite[0].x -= MOVESPEED;
}
}
else if(pMe->m_Game.m_MainSprite.m_iKeyState&KEY_RIGHT)
{
pMe->m_Game.m_MainSprite.m_bIsLeft = FALSE;
if(!CheckTileCollisionHorizon(pMe))
{
pMe->m_Game.m_MainSprite.m_sprite[0].x += MOVESPEED;
}
}
if(pMe->m_Game.m_MainSprite.m_iKeyState&KEY_OK_MASK)
{
for(i=0;i<3;i++)
{
if(pMe->m_Game.m_StaticSprites[i].unLayer==SPRITE_LAYER_HIDDEN)
{
SpriteInit8(pMe->m_Game.m_StaticSprites,i,pMe->m_Game.m_MainSprite.m_sprite[0].x,pMe->m_Game.m_MainSprite.m_sprite[0].y+5,0,SPRITE_LAYER_1);
break;
}
}
}
if (pMe->m_Game.m_MainSprite.m_sprite[0].x != pMe->DeviceInfo.cxScreen / 4)
{
pMe->m_Game.bgdx = pMe->DeviceInfo.cxScreen / 4 - pMe->m_Game.m_MainSprite.m_sprite[0].x;
}
else
{
pMe->m_Game.bgdx = 0;
}
if(pMe->m_Game.m_MidMap.m_nX-pMe->m_Game.bgdx<0
||pMe->m_Game.m_MidMap.m_nX-pMe->m_Game.bgdx>
pMe->m_Game.m_MidMap.m_nTileSize*pMe->m_Game.m_MidMap.m_nWidth-pMe->DeviceInfo.cxScreen)
{
pMe->m_Game.bgdx=0;
}
//金币动作
for(i=0;i<3;i++)
{
pMe->m_Game.m_MoveSpriteProp[0].cnt=++pMe->m_Game.m_MoveSpriteProp[0].cnt%4;
pMe->m_Game.m_MoveSprites[i].unSpriteIndex = pMe->m_Game.m_MoveSpriteProp[0].cnt;
}
for(i=0;i<3;i++)
{
if(pMe->m_Game.m_StaticSprites[i].unLayer!=SPRITE_LAYER_HIDDEN)
{
//运动轨迹
pMe->m_Game.m_StaticSprites[i].x+=BULLETSPEED;
if(pMe->m_Game.m_StaticSprites[i].x>pMe->DeviceInfo.cxScreen)
{
pMe->m_Game.m_StaticSprites[i].unLayer = SPRITE_LAYER_HIDDEN;
}
}
}
pMe->m_Game.m_MainSprite.m_sprite[0].x += pMe->m_Game.bgdx;
pMe->m_Game.m_MainSprite.m_sprite[0].y += pMe->m_Game.bgdy;
pMe->m_Game.m_MidMap.m_nX -=pMe->m_Game.bgdx;
pMe->m_Game.m_MidMap.m_nY -=pMe->m_Game.bgdy;
pMe->m_Game.m_Maps[0].y += pMe->m_Game.bgdy;
//其它的偏移
for(i=0;i<sizeof(pMe->m_Game.m_MoveSprites)/sizeof(AEESpriteCmd);i++)
{
pMe->m_Game.m_MoveSprites[i].x += pMe->m_Game.bgdx;
pMe->m_Game.m_MoveSprites[i].y += pMe->m_Game.bgdy;
}
//修正坐标
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -