📄 magicshot.c
字号:
pMe->enemy[2].unLayer = SPRITE_LAYER_HIDDEN;
}
}
//碰撞检测
for(i =0;i < 3;i++)
{
if(pMe->magic[0].x+32 > pMe->enemy[i].x && pMe->magic[0].x +32 < pMe->enemy[i].x+16
&& pMe->magic[0].y > pMe->enemy[i].y && pMe->magic[0].y < pMe->enemy[i].y+16
|| pMe->magic[0].x < pMe->enemy[i].x+20 && pMe->magic[0].x > pMe->enemy[i].x
&& pMe->magic[0].y > pMe->enemy[i].y && pMe->magic[0].y <pMe->enemy[i].y+16)
{
pMe->enemyCount[i] = 0;
pMe->enemy[i].unLayer = SPRITE_LAYER_HIDDEN;
pMe->enemy[i].x = 999;
pMe->roleScore += 1;
//奖励 算法
ShowGameScore(pMe);
}
}
}
//--------------------------------------------------------------------------------------------------------------------------------
//随即数获得器
//--------------------------------------------------------------------------------------------------------------------------------
int Random(int16 range)
{
uint16 rand;
GETRAND((byte *)&rand,2);
return range == 0 ? 0 : rand%range;
}
//--------------------------------------------------------------------------------------------------------------------------------
//更新时间槽
//--------------------------------------------------------------------------------------------------------------------------------
void ShowGameTime(MagicShot *pMe)
{
if(pMe->gameTime >= 10)
{
pMe->gameTime /= 10;
pMe->gameTimeAcount += 1;
}
if(pMe->gameTimeAcount > 8)
{
pMe->showTime[0].unSpriteIndex = 16;
if(pMe->gameTimeAcount >20)
{
pMe->showTime[0].unSpriteIndex = 17;
if(pMe->gameTimeAcount > 30)
{
pMe->showTime[0].unSpriteIndex = 18;
if(pMe->gameTimeAcount > 40)
{
pMe->showTime[0].unSpriteIndex = 19;
//GAME OVER
if(pMe->gameTimeAcount > 48)
{
pMe->gameState = 2;
}
}
}
}
}
}
//--------------------------------------------------------------------------------------------------------------------------------
//更新游戏积分
//--------------------------------------------------------------------------------------------------------------------------------
void ShowGameScore(MagicShot *pMe)
{
//每得到5分,敌人速度 “基本速度”上升1点;
if(pMe->roleScore % 12 == 0 && pMe->enemySpeedBase < 6)
{
pMe->enemySpeedBase += 1;
}
//每得到3分,延长游戏时间 2秒 ,
if(pMe->gameTimeAcount > 0 && pMe->roleScore % 3 == 0)
{
pMe->gameTimeAcount -= 2;//获得时间的奖励
}
//每得到3分,发射魔法速度上升
if(pMe->roleScore % 8 == 0 && pMe->powerTimer > 1)
{
pMe->powerMaxTimer -= 1;
}
}
//--------------------------------------------------------------------------------------------------------------------------------
//游戏结束
//--------------------------------------------------------------------------------------------------------------------------------
void GameOver(MagicShot* pMe)
{
IImage *pImage;
// AEEImageInfo info;
int mx=0,my=0;
//音乐停止
IMEDIA_Stop(pMe->BKMedia);
IDISPLAY_ClearScreen(pMe->pIDisplay);
if(pMe->roleScore < 20)
{
pImage = ISHELL_LoadImage(pMe->pIShell,"bad.bmp");
PlayYXMedia(pMe,3);
}
else if(pMe->roleScore >= 20 && pMe->roleScore < 40 )
{
pImage = ISHELL_LoadImage(pMe->pIShell,"normal.bmp");
PlayYXMedia(pMe,4);
}
else
{
pImage = ISHELL_LoadImage(pMe->pIShell,"good.bmp");
PlayYXMedia(pMe,5);
}
// IIMAGE_GetInfo(pImage,&info);
// mx = (pMe->DeviceInfo.cxScreen - info.cx)/2;
// my = (pMe->DeviceInfo.cyScreen - info.cy)/2;
IIMAGE_Draw(pImage,mx,my);
IDISPLAY_Update(pMe->pIDisplay);
IIMAGE_Release(pImage);
}
//--------------------------------------------------------------------------------------------------------------------------------
//画字符串ZZ
//--------------------------------------------------------------------------------------------------------------------------------
void DrawStr(MagicShot* pMe, uint16 DrawStringID)
{
AECHAR* pBuffer;
uint32 bufSize;
ISHELL_GetResSize(pMe->pIShell,GMENU_RES_FILE,DrawStringID,RESTYPE_STRING,&bufSize);
pBuffer = (AECHAR*)MALLOC(bufSize);
IDISPLAY_ClearScreen(pMe->pIDisplay);
ISHELL_LoadResString(pMe->pIShell,
GMENU_RES_FILE,
DrawStringID,
pBuffer,
bufSize);
IDISPLAY_DrawText(pMe->pIDisplay,
AEE_FONT_NORMAL,
pBuffer,
-1,50,50,
NULL,
IDF_ALIGN_CENTER | IDF_ALIGN_MIDDLE);
IDISPLAY_Update(pMe->pIDisplay);
FREE(pBuffer);
}
//--------------------------------------------------------------------------------------------------------------------------------
//菜单ZZ
//--------------------------------------------------------------------------------------------------------------------------------
boolean g_init_menu(MagicShot* pMe)
{
AEERect rect; //定义菜单显示的区域
CtlAddItem ai1,ai2,ai3,ai4; //定义 带图标菜单的结构
AEEMenuColors pc;
rect.x = 0;
rect.y = 0;
rect.dx = pMe->DeviceInfo.cxScreen; //全屏显示菜单
rect.dy = pMe->DeviceInfo.cyScreen;
pc.cSelBack=MAKE_RGB(255,255,255);
pc.cSelText=MAKE_RGB(255,0,0);
pc.cTitleText=MAKE_RGB(255,255,255);
pc.cFrame=MAKE_RGB(255,255,0);
/*
IImage *pImage;
AEEImageInfo imageInfo;
pImage=ISHELL_LoadImage(pMe->a.m_pIShell,"gmenu.bci");
IIMAGE_GetInfo(pImage,&imageInfo);
IIMAGE_SetAnimationRate(pImage,10000);
IIMAGE_Start(pImage,50,110);
IIMAGE_Release(pImage);
*/
ISHELL_CreateInstance(pMe->pIShell,AEECLSID_MENUCTL,&pMe->pIMenuCtl); //创建菜单实例
IMENUCTL_SetColors (pMe->pIMenuCtl , &pc ) ;
//------定义一个带图标菜单-------
ai1.dwData =213;
ai1.pszResImage = GMENU_RES_FILE; //包含有菜单图标的资源文件名
ai1.pszResText = GMENU_RES_FILE; //包含有菜单文本字符串的资源文件名
ai1.wItemID = MY_MENU_ID_M1; //该菜单项的ID
ai1.wText = IDS_STRING_1001; //资源文件中菜单文本字符串的ID
ai1.wImage = IDI_OBJECT_5001; //资源文件中菜单图标的ID
ai1.pText = NULL;
ai1.pImage = NULL;
ai1.wFont = 0; //字体
//------定义一个带图标菜单-------
ai2.dwData =213;
ai2.pszResImage = GMENU_RES_FILE; //包含有菜单图标的资源文件名
ai2.pszResText = GMENU_RES_FILE; //包含有菜单文本字符串的资源文件名
ai2.wItemID = MY_MENU_ID_M2; //该菜单项的ID
ai2.wText = IDS_STRING_1002; //资源文件中菜单文本字符串的ID
ai2.wImage = IDI_OBJECT_5002; //资源文件中菜单图标的ID
ai2.pText = NULL;
ai2.pImage = NULL;
ai2.wFont = 0; //字体
ai3.dwData =213;
ai3.pszResImage = GMENU_RES_FILE; //包含有菜单图标的资源文件名
ai3.pszResText = GMENU_RES_FILE; //包含有菜单文本字符串的资源文件名
ai3.wItemID = MY_MENU_ID_M3; //该菜单项的ID
ai3.wText = IDS_STRING_1005; //资源文件中菜单文本字符串的ID
ai3.wImage = IDI_OBJECT_5003; //资源文件中菜单图标的ID
ai3.pText = NULL;
ai3.pImage = NULL;
ai3.wFont = 0; //字体
ai4.dwData =213;
ai4.pszResImage = GMENU_RES_FILE; //包含有菜单图标的资源文件名
ai4.pszResText = GMENU_RES_FILE; //包含有菜单文本字符串的资源文件名
ai4.wItemID = MY_MENU_ID_M4; //该菜单项的ID
ai4.wText = IDS_STRING_1003; //资源文件中菜单文本字符串的ID
ai4.wImage = IDI_OBJECT_5004; //资源文件中菜单图标的ID
ai4.pText = NULL;
ai4.pImage = NULL;
ai4.wFont = 0; //字体
//-------设置菜单的标题----------------
IMENUCTL_SetTitle(pMe->pIMenuCtl,GMENU_RES_FILE,IDS_STRING_1004,NULL);
//-------使用IMENUCTL_AddItem()函数添加两个不带图标的菜单----------------
// IMENUCTL_AddItem(pMe->pIMenuCtl,GMENU_RES_FILE,IDS_STRING_1001,MY_MENU_ID_M1,NULL,0);
// IMENUCTL_AddItem(pMe->pIMenuCtl,GMENU_RES_FILE,IDS_STRING_1002,MY_MENU_ID_M2,NULL,0);
// IMENUCTL_AddItem(pMe->pIMenuCtl,GMENU_RES_FILE,IDS_STRING_1005,MY_MENU_ID_M3,NULL,0);
// IMENUCTL_AddItem(pMe->pIMenuCtl,GMENU_RES_FILE,IDS_STRING_1003,MY_MENU_ID_M4,NULL,0);
//-------使用IMENUCTL_AddItemEx()函数添加1个带图标的菜单----------------
if (IMENUCTL_AddItemEx(pMe->pIMenuCtl,&ai1) == TRUE)
{
DBGPRINTF("icon menu item add success");
}else
{
DBGPRINTF("icon menu item add faild");
}
//-------使用IMENUCTL_AddItemEx()函数添加1个带图标的菜单----------------
if (IMENUCTL_AddItemEx(pMe->pIMenuCtl,&ai2) == TRUE)
{
DBGPRINTF("icon menu item add success");
}else
{
DBGPRINTF("icon menu item add faild");
}
//-------使用IMENUCTL_AddItemEx()函数添加1个带图标的菜单----------------
if (IMENUCTL_AddItemEx(pMe->pIMenuCtl,&ai3) == TRUE)
{
DBGPRINTF("icon menu item add success");
}else
{
DBGPRINTF("icon menu item add faild");
}
//-------使用IMENUCTL_AddItemEx()函数添加1个带图标的菜单----------------
if (IMENUCTL_AddItemEx(pMe->pIMenuCtl,&ai4) == TRUE)
{
DBGPRINTF("icon menu item add success");
}else
{
DBGPRINTF("icon menu item add faild");
}
IMENUCTL_EnableCommand(pMe->pIMenuCtl,TRUE);
IMENUCTL_SetRect(pMe->pIMenuCtl,&rect);
IMENUCTL_SetActive(pMe->pIMenuCtl,TRUE);
return TRUE;
}
//--------------------------------------------------------------------------------------------------------------------------------
//画字符串CLC
//--------------------------------------------------------------------------------------------------------------------------------
void drawgamethanks(MagicShot* pMe)
{
int s;
int i;
int height;
int lines;
int count;
int fit;
AECHAR *LTXT;
height = IDISPLAY_GetFontMetrics(pMe->pIDisplay,AEE_FONT_NORMAL,NULL,NULL);
lines = pMe->DeviceInfo.cyScreen/height;
count = 0;
IDISPLAY_ClearScreen(pMe->pIDisplay);
ISHELL_GetResSize(pMe->pIShell,THXANDHELP_RES_FILE,IDS_STRING_1001,RESTYPE_STRING,&s);
LTXT = (AECHAR *)MALLOC(s);
ISHELL_LoadResString(pMe->pIShell,THXANDHELP_RES_FILE,IDS_STRING_1001,LTXT,s);
for(i = 0;i < lines;i++)
{
IDISPLAY_MeasureTextEx(pMe->pIDisplay,AEE_FONT_NORMAL,LTXT+count,-1,pMe->DeviceInfo.cxScreen,&fit);
if(fit != -1)
{
IDISPLAY_DrawText(pMe->pIDisplay,AEE_FONT_NORMAL,LTXT+count,fit,0,i*height,NULL,IDF_TEXT_TRANSPARENT);
count+=fit;
}
else
{
IDISPLAY_DrawText(pMe->pIDisplay,AEE_FONT_NORMAL,LTXT+count,-1,0,i*height,NULL,IDF_TEXT_TRANSPARENT);
}
}
IDISPLAY_Update(pMe->pIDisplay);
FREE(LTXT);
}
//--------------------------------------------------------------------------------------------------------------------------------
//画字符串GH
//--------------------------------------------------------------------------------------------------------------------------------
void drawgamehelp(MagicShot* pMe)
{
int s;
int i;
int height;
int lines;
int count;
int fit;
AECHAR *LTXT;
height = IDISPLAY_GetFontMetrics(pMe->pIDisplay,AEE_FONT_NORMAL,NULL,NULL);
lines = pMe->DeviceInfo.cyScreen/height;
count = 0;
IDISPLAY_ClearScreen(pMe->pIDisplay);
ISHELL_GetResSize(pMe->pIShell,THXANDHELP_RES_FILE,IDS_STRING_1002,RESTYPE_STRING,&s);
LTXT = (AECHAR *)MALLOC(s);
ISHELL_LoadResString(pMe->pIShell,THXANDHELP_RES_FILE,IDS_STRING_1002,LTXT,s);
for(i = 0;i < lines;i++)
{
IDISPLAY_MeasureTextEx(pMe->pIDisplay,AEE_FONT_NORMAL,LTXT+count,-1,pMe->DeviceInfo.cxScreen,&fit);
if(fit != -1)
{
IDISPLAY_DrawText(pMe->pIDisplay,AEE_FONT_NORMAL,LTXT+count,fit,0,i*height,NULL,IDF_TEXT_TRANSPARENT);
count+=fit;
}
else
{
IDISPLAY_DrawText(pMe->pIDisplay,AEE_FONT_NORMAL,LTXT+count,-1,0,i*height,NULL,IDF_TEXT_TRANSPARENT);
}
}
IDISPLAY_Update(pMe->pIDisplay);
FREE(LTXT);
}
//--------------------------------------------------------------------------------------------------------------------------------
//背景音乐BJ
//--------------------------------------------------------------------------------------------------------------------------------
void PlayBKMedia(MagicShot *pMe)//背景音乐
{
AEEMediaData pmd;
if(pMe->BKMedia)
{
IMEDIA_Stop(pMe->BKMedia);
IMEDIA_RegisterNotify(pMe->BKMedia,NULL,NULL);
IMEDIA_Release(pMe->BKMedia);
}
ISHELL_CreateInstance(pMe->pIShell,AEECLSID_MEDIAMIDI,(void**)&pMe->BKMedia);
pmd.clsData=MMD_FILE_NAME;
pmd.pData=(void**)"midi.mid"; //实际的数据指针
pmd.dwSize=0;
IMEDIA_SetMediaData(pMe->BKMedia,&pmd); //设置MEDIA数据
IMEDIA_RegisterNotify(pMe->BKMedia,NULL/*MediaNotify*/,pMe); //注册回调函数
pMe->m_bIsContinue=TRUE; //设置连续播放
IMEDIA_Play(pMe->BKMedia); //开始播放
}
//--------------------------------------------------------------------------------------------------------------------------------
//效果音乐MY
//--------------------------------------------------------------------------------------------------------------------------------
void PlayYXMedia(MagicShot *pMe,int playcase)//效果音乐
{
AEEMediaData pmd;
if(pMe->YXMedia)
{
IMEDIA_Stop(pMe->YXMedia);
IMEDIA_RegisterNotify(pMe->YXMedia,NULL,NULL);
IMEDIA_Release(pMe->YXMedia);
}
ISHELL_CreateInstance(pMe->pIShell,AEECLSID_MEDIAMIDI,(void**)&pMe->YXMedia);
pmd.clsData=MMD_FILE_NAME;
switch(playcase)
{
case 1:
pmd.pData=(void**)"shot.mp3";
break;
case 2:
pmd.pData=(void**)"down.mp3";
break;
case 3:
pmd.pData=(void**)"lost.mp3";
break;
case 4:
pmd.pData=(void**)"normal.mp3";
break;
case 5:
pmd.pData=(void**)"win.mp3";
break;
}
pmd.dwSize=0;
IMEDIA_SetMediaData(pMe->YXMedia,&pmd); //设置MEDIA数据
IMEDIA_RegisterNotify(pMe->YXMedia,NULL/*MediaNotify*/,pMe); //注册回调函数
pMe->YX_bIsContinue=FALSE; //设置连续播放
IMEDIA_Play(pMe->YXMedia); //开始播放
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -