📄 gamedemo.c
字号:
}
if(((pMap->m_pMapArray[xTile1+i*pMap->m_nWidth]>>8)&0x01)==0x01)
{
pMe->m_Game.m_MainSprite.dy = 0;
pMe->m_Game.m_MainSprite.m_iKeyState &=~KEY_UP_MASK;
break;
}
if(((pMap->m_pMapArray[xTile2+i*pMap->m_nWidth]>>8)&0x01)==0x01)
{
pMe->m_Game.m_MainSprite.dy = 0;
pMe->m_Game.m_MainSprite.m_iKeyState &=~KEY_UP_MASK;
break;
}
}
}
}
boolean CheckTileCollisionHorizon(GameDemo *pMe)
{
int i;
int yTile1;
int yTile2;
int yTile3;
AEERect mainRect;
AEERect tileRect;
mainRect.x = pMe->m_Game.m_MainSprite.m_sprite[0].x+pMe->m_Game.m_MidMap.m_nX+7;
mainRect.y = pMe->m_Game.m_MainSprite.m_sprite[0].y+pMe->m_Game.m_MidMap.m_nY+1;
mainRect.dx = 16;
mainRect.dy = 31;
tileRect.dx = 16;
tileRect.dy = 16;
if(pMe->m_Game.m_MainSprite.m_bIsLeft)
{
mainRect.x = pMe->m_Game.m_MainSprite.m_sprite[0].x+pMe->m_Game.m_MidMap.m_nX+7-MOVESPEED;
i=(pMe->m_Game.m_MainSprite.m_sprite[0].x+pMe->m_Game.m_MidMap.m_nX+7-MOVESPEED)/pMe->m_Game.m_MidMap.m_nTileSize;
{
if(i<0||i>pMe->m_Game.m_MidMap.m_nWidth-1)
{
return FALSE;
}
yTile1=(pMe->m_Game.m_MainSprite.m_sprite[0].y+pMe->m_Game.m_MidMap.m_nY)/pMe->m_Game.m_MidMap.m_nTileSize;
yTile2=(pMe->m_Game.m_MainSprite.m_sprite[0].y+pMe->m_Game.m_MidMap.m_nY)/pMe->m_Game.m_MidMap.m_nTileSize+1;
yTile3=(pMe->m_Game.m_MainSprite.m_sprite[0].y+pMe->m_Game.m_MidMap.m_nY)/pMe->m_Game.m_MidMap.m_nTileSize+2;
if(yTile1<0||yTile3>pMe->m_Game.m_MidMap.m_nHeight-1)
{
return FALSE;
}
if(((pMe->m_Game.m_MidMap.m_pMapArray[i+yTile1*pMe->m_Game.m_MidMap.m_nWidth]>>8)&0x04)==0x04)
{
tileRect.x=i*16;
tileRect.y=yTile1*16;
if(IntersectRect(&mainRect,&tileRect))
{
return TRUE;
}
}
if(((pMe->m_Game.m_MidMap.m_pMapArray[i+yTile2*pMe->m_Game.m_MidMap.m_nWidth]>>8)&0x04)==0x04)
{
tileRect.x=i*16;
tileRect.y=yTile2*16;
if(IntersectRect(&mainRect,&tileRect))
{
return TRUE;
}
}
if(((pMe->m_Game.m_MidMap.m_pMapArray[i+yTile3*pMe->m_Game.m_MidMap.m_nWidth]>>8)&0x04)==0x04)
{
tileRect.x=i*16;
tileRect.y=yTile3*16;
if(IntersectRect(&mainRect,&tileRect))
{
return TRUE;
}
}
}
}
else
{
mainRect.x = pMe->m_Game.m_MainSprite.m_sprite[0].x +pMe->m_Game.m_MidMap.m_nX+7+MOVESPEED;
i = (pMe->m_Game.m_MainSprite.m_sprite[0].x+pMe->m_Game.m_MidMap.m_nX-7+MOVESPEED)/pMe->m_Game.m_MidMap.m_nTileSize+2;
{
if(i<0||i>pMe->m_Game.m_MidMap.m_nWidth-1)
{
return FALSE;
}
yTile1=(pMe->m_Game.m_MainSprite.m_sprite[0].y+pMe->m_Game.m_MidMap.m_nY)/pMe->m_Game.m_MidMap.m_nTileSize;
yTile2=(pMe->m_Game.m_MainSprite.m_sprite[0].y+pMe->m_Game.m_MidMap.m_nY)/pMe->m_Game.m_MidMap.m_nTileSize+1;
yTile3=(pMe->m_Game.m_MainSprite.m_sprite[0].y+pMe->m_Game.m_MidMap.m_nY)/pMe->m_Game.m_MidMap.m_nTileSize+2;
if(yTile1<0||yTile3>pMe->m_Game.m_MidMap.m_nHeight-1)
{
return FALSE;
}
if(((pMe->m_Game.m_MidMap.m_pMapArray[i+yTile1*pMe->m_Game.m_MidMap.m_nWidth]>>8)&0x04)==0x04)
{
//判断矩形是否有交点
tileRect.x=i*16;
tileRect.y=yTile1*16;
if(IntersectRect(&mainRect,&tileRect))
{
return TRUE;
}
}
if(((pMe->m_Game.m_MidMap.m_pMapArray[i+yTile2*pMe->m_Game.m_MidMap.m_nWidth]>>8)&0x04)==0x04)
{
//判断矩形是否有交点
tileRect.x=i*16;
tileRect.y=yTile2*16;
if(IntersectRect(&mainRect,&tileRect))
{
return TRUE;
}
}
if(((pMe->m_Game.m_MidMap.m_pMapArray[i+yTile3*pMe->m_Game.m_MidMap.m_nWidth]>>8)&0x04)==0x04)
{
//判断矩形是否有交点
tileRect.x=i*16;
tileRect.y=yTile3*16;
if(IntersectRect(&mainRect,&tileRect))
{
return TRUE;
}
}
}
}
return FALSE;
}
boolean IntersectRect(AEERect *pRect1,AEERect *pRect2)
{
if((pRect1->x + pRect1->dx > pRect2->x)&&(pRect1->y + pRect1->dy > pRect2->y)
&&(pRect2->x + pRect2->dx > pRect1->x)&&(pRect2->y + pRect2->dy > pRect1->y))
{
return TRUE;
}
return FALSE;
}
void EnemyAction(GameDemo *pMe,AEESpriteCmd *pSprites,int index,int num)
{
int i;
for(i=index;i<index+num;i++)
{
if(pSprites[i].unLayer!=SPRITE_LAYER_HIDDEN)
{
if(pMe->m_Game.m_MoveSpriteProp[i].isLeft)
{
pSprites[i].x-=4;
if(pMe->m_Game.m_MoveSpriteProp[i].originX-(pMe->m_Game.m_MidMap.m_nX+pSprites[i].x)>pMe->m_Game.m_MoveSpriteProp[i].interval)
{
pMe->m_Game.m_MoveSpriteProp[i].isLeft=FALSE;
pMe->m_Game.m_MoveSpriteProp[i].offset=3;
}
}
else
{
pSprites[i].x+=4;
if((pSprites[i].x+pMe->m_Game.m_MidMap.m_nX)-pMe->m_Game.m_MoveSpriteProp[i].originX>pMe->m_Game.m_MoveSpriteProp[i].interval)
{
pMe->m_Game.m_MoveSpriteProp[i].isLeft=TRUE;
pMe->m_Game.m_MoveSpriteProp[i].offset=0;
}
}
pSprites[i].unSpriteIndex++;
if(pSprites[i].unSpriteIndex>2+pMe->m_Game.m_MoveSpriteProp[i].offset)
{
pSprites[i].unSpriteIndex=pMe->m_Game.m_MoveSpriteProp[i].offset;
}
}
}
}
void CheckBulletEnemyCollision(GameDemo *pMe)
{
//子弹与敌人的碰撞
int i,j;
AEERect rect1;
AEERect rect2;
rect1.dx = 8;
rect1.dy = 8;
rect2.dx = 20;
rect2.dy = 20;
for(i=0;i<3;i++)
{
if(pMe->m_Game.m_StaticSprites[i].unLayer!=SPRITE_LAYER_HIDDEN)
{
rect1.x = pMe->m_Game.m_StaticSprites[i].x;
rect1.y = pMe->m_Game.m_StaticSprites[i].y;
for(j=6;j<8;j++)
{
if(pMe->m_Game.m_MoveSprites[j].unLayer!=SPRITE_LAYER_HIDDEN)
{
rect2.x = pMe->m_Game.m_MoveSprites[j].x;
rect2.y = pMe->m_Game.m_MoveSprites[j].y;
if(IntersectRect(&rect1,&rect2))
{
pMe->m_Game.m_StaticSprites[i].unLayer = SPRITE_LAYER_HIDDEN;
pMe->m_Game.m_MoveSprites[j].unLayer = SPRITE_LAYER_HIDDEN;
PlayGameMedia(pMe);
break;
}
}
}
}
}
}
void CheckMainSpriteEnemyCollision(GameDemo *pMe)
{
//敌人与主角的碰撞
int i;
AEERect rect1;
AEERect rect2;
rect1.dx = 20;
rect1.dy = 32;
rect2.dx = 20;
rect2.dy = 32;
rect1.x = pMe->m_Game.m_MainSprite.m_sprite[0].x;
rect1.y = pMe->m_Game.m_MainSprite.m_sprite[0].y;
for(i=6;i<8;i++)
{
if(pMe->m_Game.m_MoveSprites[i].unLayer!=SPRITE_LAYER_HIDDEN)
{
rect2.x = pMe->m_Game.m_MoveSprites[i].x;
rect2.y = pMe->m_Game.m_MoveSprites[i].y;
if(IntersectRect(&rect1,&rect2))
{
PlayGameMedia(pMe);
MainGameDataInit(pMe);
break;
}
}
}
}
void SaveCurrentData(GameDemo *pMe)
{
IFileMgr *pIFileMgr;
IFile *pIFile;
ISHELL_CreateInstance(pMe->pIShell,AEECLSID_FILEMGR,(void**)&pIFileMgr);
if(IFILEMGR_Test(pIFileMgr,"save.dat")==SUCCESS)
{
pIFile = IFILEMGR_OpenFile(pIFileMgr,"save.dat",_OFM_READWRITE);
}
else
{
pIFile = IFILEMGR_OpenFile(pIFileMgr,"save.dat",_OFM_CREATE);
}
if(IFILE_Write(pIFile,pMe->m_Game.m_MoveSprites,sizeof(pMe->m_Game.m_MoveSprites))!=sizeof(pMe->m_Game.m_MoveSprites))
{
IFILE_Release(pIFile);
IFILEMGR_Remove(pIFileMgr,"save.dat");
IFILEMGR_Release(pIFileMgr);
return;
}
if(IFILE_Write(pIFile,pMe->m_Game.m_StaticSprites,sizeof(pMe->m_Game.m_StaticSprites))!=sizeof(pMe->m_Game.m_StaticSprites))
{
IFILE_Release(pIFile);
IFILEMGR_Remove(pIFileMgr,"save.dat");
IFILEMGR_Release(pIFileMgr);
return;
}
if(IFILE_Write(pIFile,pMe->m_Game.m_MoveSpriteProp,sizeof(pMe->m_Game.m_MoveSpriteProp))!=sizeof(pMe->m_Game.m_MoveSpriteProp))
{
IFILE_Release(pIFile);
IFILEMGR_Remove(pIFileMgr,"save.dat");
IFILEMGR_Release(pIFileMgr);
return;
}
if(IFILE_Write(pIFile,pMe->m_Game.m_StaticSpriteProp,sizeof(pMe->m_Game.m_StaticSpriteProp))!=sizeof(pMe->m_Game.m_StaticSpriteProp))
{
IFILE_Release(pIFile);
IFILEMGR_Remove(pIFileMgr,"save.dat");
IFILEMGR_Release(pIFileMgr);
return;
}
if(IFILE_Write(pIFile,&pMe->m_Game.m_MidMap.m_nX,sizeof(pMe->m_Game.m_MidMap.m_nX))!=sizeof(pMe->m_Game.m_MidMap.m_nX))
{
IFILE_Release(pIFile);
IFILEMGR_Remove(pIFileMgr,"save.dat");
IFILEMGR_Release(pIFileMgr);
return;
}
if(IFILE_Write(pIFile,&pMe->m_Game.m_MidMap.m_nY,sizeof(pMe->m_Game.m_MidMap.m_nY))!=sizeof(pMe->m_Game.m_MidMap.m_nY))
{
IFILE_Release(pIFile);
IFILEMGR_Remove(pIFileMgr,"save.dat");
IFILEMGR_Release(pIFileMgr);
return;
}
if(IFILE_Write(pIFile,&pMe->m_Game.m_MainSprite.dy,sizeof(pMe->m_Game.m_MainSprite.dy))!=sizeof(pMe->m_Game.m_MainSprite.dy))
{
IFILE_Release(pIFile);
IFILEMGR_Remove(pIFileMgr,"save.dat");
IFILEMGR_Release(pIFileMgr);
return;
}
if(IFILE_Write(pIFile,&pMe->m_Game.m_MainSprite.m_bIsLeft,sizeof(pMe->m_Game.m_MainSprite.m_bIsLeft))!=sizeof(pMe->m_Game.m_MainSprite.m_bIsLeft))
{
IFILE_Release(pIFile);
IFILEMGR_Remove(pIFileMgr,"save.dat");
IFILEMGR_Release(pIFileMgr);
return;
}
if(IFILE_Write(pIFile,pMe->m_Game.m_MainSprite.m_sprite,sizeof(pMe->m_Game.m_MainSprite.m_sprite))!=sizeof(pMe->m_Game.m_MainSprite.m_sprite))
{
IFILE_Release(pIFile);
IFILEMGR_Remove(pIFileMgr,"save.dat");
IFILEMGR_Release(pIFileMgr);
return;
}
if(IFILE_Write(pIFile,&pMe->m_Game.m_MainSprite.offset,sizeof(pMe->m_Game.m_MainSprite.offset))!=sizeof(pMe->m_Game.m_MainSprite.offset))
{
IFILE_Release(pIFile);
IFILEMGR_Remove(pIFileMgr,"save.dat");
IFILEMGR_Release(pIFileMgr);
return;
}
IFILE_Release(pIFile);
IFILEMGR_Release(pIFileMgr);
}
void LoadSaveData(GameDemo *pMe)
{
IFileMgr *pIFileMgr;
IFile *pIFile;
ISHELL_CreateInstance(pMe->pIShell,AEECLSID_FILEMGR,(void**)&pIFileMgr);
if(IFILEMGR_Test(pIFileMgr,"save.dat")==SUCCESS)
{
pIFile = IFILEMGR_OpenFile(pIFileMgr,"save.dat",_OFM_READWRITE);
}
else
{
IFILEMGR_Release(pIFileMgr);
return ;
}
IFILE_Read(pIFile,pMe->m_Game.m_MoveSprites,sizeof(pMe->m_Game.m_MoveSprites));
IFILE_Read(pIFile,pMe->m_Game.m_StaticSprites,sizeof(pMe->m_Game.m_StaticSprites));
IFILE_Read(pIFile,pMe->m_Game.m_MoveSpriteProp,sizeof(pMe->m_Game.m_MoveSpriteProp));
IFILE_Read(pIFile,pMe->m_Game.m_StaticSpriteProp,sizeof(pMe->m_Game.m_StaticSpriteProp));
IFILE_Read(pIFile,&pMe->m_Game.m_MidMap.m_nX,sizeof(pMe->m_Game.m_MidMap.m_nX));
IFILE_Read(pIFile,&pMe->m_Game.m_MidMap.m_nY,sizeof(pMe->m_Game.m_MidMap.m_nY));
IFILE_Read(pIFile,&pMe->m_Game.m_MainSprite.dy,sizeof(pMe->m_Game.m_MainSprite.dy));
IFILE_Read(pIFile,&pMe->m_Game.m_MainSprite.m_bIsLeft,sizeof(pMe->m_Game.m_MainSprite.m_bIsLeft));
IFILE_Read(pIFile,pMe->m_Game.m_MainSprite.m_sprite,sizeof(pMe->m_Game.m_MainSprite.m_sprite));
IFILE_Read(pIFile,&pMe->m_Game.m_MainSprite.offset,sizeof(pMe->m_Game.m_MainSprite.offset));
IFILE_Release(pIFile);
IFILEMGR_Release(pIFileMgr);
}
static void MediaNotify(void *pUser,AEEMediaCmdNotify *pCmdNotify)
{
GameDemo *pMe = (GameDemo*)pUser;
if(pMe->m_bIsContinue)
{
if( pCmdNotify->nCmd == MM_CMD_PLAY)
{
if(pCmdNotify->nStatus == MM_STATUS_DONE)
{
IMEDIA_Play(pMe->m_pIMedia);
}
}
}
}
void PlayBgMedia(GameDemo *pMe)
{
if(pMe->m_bVolOn)
{
AEEMediaData pmd;
if(pMe->m_pIMedia)
{
IMEDIA_Stop(pMe->m_pIMedia);
IMEDIA_RegisterNotify(pMe->m_pIMedia,NULL,NULL);
IMEDIA_Release(pMe->m_pIMedia);
}
ISHELL_CreateInstance(pMe->pIShell,AEECLSID_MEDIAMIDI,(void**)&pMe->m_pIMedia);
pmd.clsData = MMD_FILE_NAME;
pmd.pData = (void*)"begin.mid";
pmd.dwSize=0;
IMEDIA_SetMediaData(pMe->m_pIMedia, &pmd);
IMEDIA_RegisterNotify(pMe->m_pIMedia,MediaNotify,pMe);
pMe->m_bIsContinue = TRUE;
IMEDIA_Play(pMe->m_pIMedia);
}
}
void PlayGameMedia(GameDemo *pMe)
{
if(pMe->m_bVolOn)
{
AEEMediaData pmd;
if(pMe->m_pIMedia)
{
IMEDIA_Stop(pMe->m_pIMedia);
IMEDIA_RegisterNotify(pMe->m_pIMedia,NULL,NULL);
IMEDIA_Release(pMe->m_pIMedia);
}
ISHELL_CreateInstance(pMe->pIShell,AEECLSID_MEDIAMMF,(void**)&pMe->m_pIMedia);
pmd.clsData = MMD_FILE_NAME;
pmd.pData = (void*)"beat.mmf";
pmd.dwSize=0;
IMEDIA_SetMediaData(pMe->m_pIMedia, &pmd);
IMEDIA_RegisterNotify(pMe->m_pIMedia,MediaNotify,pMe);
pMe->m_bIsContinue = FALSE;
IMEDIA_Play(pMe->m_pIMedia);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -