📄 scorelistwnd.c
字号:
#include "ScoreListWnd.h"
#include "AEEStdlib.h"
#include "russdmd.h"
#include "russdmd_res.h"
static void ScoreListWnd_Update(ScoreListWnd* pthis);
static void ScoreListWnd_LoadList(ScoreListWnd* pthis);
static boolean ScoreListWnd_SaveList(ScoreListWnd* pthis);
boolean ScoreListWnd_New(ScoreListWnd *pthis, RussDmdApp* pMe)
{
pthis->pMe = pMe;
pthis->m_pimage = NULL;
pthis->m_bAddToList = FALSE;
MEMSET(pthis->scorelist, 0, sizeof(pthis->scorelist));
pthis->m_nStepH = IDISPLAY_GetFontMetrics(pthis->pMe->a.m_pIDisplay, AEE_FONT_NORMAL, NULL, NULL) + 2;
ScoreListWnd_LoadList(pthis);
return TRUE;
}
boolean ScoreListWnd_HandleEvent(ScoreListWnd* pthis, AEEEvent eCode, uint16 wParam, uint32 dwParam)
{
switch (eCode)
{
case EVT_APP_SUSPEND:
ISHELL_CancelTimer(pthis->pMe->a.m_pIShell, (PFNNOTIFY)ScoreListWnd_Update, pthis);
return TRUE;
case EVT_APP_RESUME:
ScoreListWnd_Update(pthis);
return TRUE;
default:
return FALSE;
}
}
boolean ScoreListWnd_Open(ScoreListWnd* pthis)
{
pthis->m_pszText = (AECHAR*)MALLOC(MAX_STRING_SIZE * sizeof(AECHAR));
ISHELL_LoadResString(pthis->pMe->a.m_pIShell, RUSSDMD_RES_FILE, IDS_SCORE, pthis->m_pszText, MAX_STRING_SIZE);
pthis->m_pimage = ISHELL_LoadResImage(pthis->pMe->a.m_pIShell, RUSSDMD_RES_FILE, IMG_OPTIONBG);
if (pthis->m_bAddToList)
{
pthis->m_bAddToList = FALSE;
if (ScoreListWnd_AddToList(pthis, pthis->pMe->game.m_nScore) == FALSE)
{
pthis->pMe->mainMenu.m_state = eMenuState_FILEERROR;
return RussDmdApp_SetActiveWnd(pthis->pMe, IDW_MAINMENU);
}
}
ScoreListWnd_Update(pthis);
return TRUE;
}
static void ScoreListWnd_Update(ScoreListWnd* pthis)
{
int loop;
AECHAR temp[100];
if (pthis->pMe->keyFlag & kKeypad_Clr)
{
RussDmdApp_SetActiveWnd(pthis->pMe, IDW_MAINMENU);
return;
}
ISHELL_SetTimer(pthis->pMe->a.m_pIShell, MAIN_LOOP_TIME, (PFNNOTIFY)ScoreListWnd_Update, pthis);
//IDISPLAY_FillRect(pthis->pMe->a.m_pIDisplay, NULL, RGB_BLACK);
IIMAGE_Draw(pthis->m_pimage, 0, 0);
IDISPLAY_DrawText(pthis->pMe->a.m_pIDisplay, AEE_FONT_BOLD, pthis->m_pszText, -1, 0,
10, NULL, IDF_ALIGN_CENTER | IDF_TEXT_TRANSPARENT);
for(loop = 0; loop < MAX_LIST_LENGTH; loop ++)
{
WSPRINTF(temp, 100, (const AECHAR*)L"%d", pthis->scorelist[loop] * 100);
IDISPLAY_DrawText( pthis->pMe->a.m_pIDisplay, AEE_FONT_NORMAL, temp, -1,
0, 10 + 5 + (1 + loop) * (pthis->m_nStepH + 3), NULL, IDF_TEXT_TRANSPARENT | IDF_ALIGN_CENTER);
}
IDISPLAY_Update(pthis->pMe->a.m_pIDisplay);
}
void ScoreListWnd_Close(ScoreListWnd* pthis)
{
CleanDeleteImage(pthis->m_pimage);
FREEIF(pthis->m_pszText);
ISHELL_CancelTimer(pthis->pMe->a.m_pIShell, (PFNNOTIFY)ScoreListWnd_Update, pthis);
}
void ScoreListWnd_Free(ScoreListWnd* pthis)
{
ScoreListWnd_Close(pthis);
}
static void ScoreListWnd_LoadList(ScoreListWnd* pthis)
{
IFileMgr *pFileMgr = NULL;
IFile *pFile = NULL;
IShell *pIShell = pthis->pMe->a.m_pIShell;
int i;
if(ISHELL_CreateInstance(pIShell, AEECLSID_FILEMGR, (void **)&pFileMgr) != SUCCESS)
{
return;
}
if (IFILEMGR_Test(pFileMgr, LIST_FILE) == EFAILED)
{
pFile = IFILEMGR_OpenFile(pFileMgr, LIST_FILE, _OFM_CREATE);
IFILE_Write(pFile, pthis->scorelist, sizeof(int32) * MAX_LIST_LENGTH);
IFILE_Release(pFile);
IFILEMGR_Release(pFileMgr);
return;
}
if((pFile = IFILEMGR_OpenFile(pFileMgr, LIST_FILE, _OFM_READWRITE)) == NULL)
{
IFILEMGR_Release(pFileMgr);
return;
}
for(i = 0; i < MAX_LIST_LENGTH; i ++)
{
IFILE_Read(pFile, &pthis->scorelist[i], sizeof(int32));
}
IFILE_Release(pFile);
IFILEMGR_Release(pFileMgr);
}
static boolean ScoreListWnd_SaveList(ScoreListWnd* pthis)
{
IFileMgr *pFileMgr = NULL;
IFile *pFile = NULL;
IShell *pIShell = pthis->pMe->a.m_pIShell;
int i;
if(ISHELL_CreateInstance(pIShell, AEECLSID_FILEMGR, (void **)&pFileMgr) != SUCCESS)
{
return FALSE;
}
if((pFile = IFILEMGR_OpenFile(pFileMgr, LIST_FILE, _OFM_READWRITE)) == NULL)
{
IFILEMGR_Release(pFileMgr);
return FALSE;
}
for(i = 0; i < MAX_LIST_LENGTH; i ++)
{
IFILE_Write(pFile, &pthis->scorelist[i], sizeof(int32));
}
IFILE_Release(pFile);
IFILEMGR_Release(pFileMgr);
return TRUE;
}
boolean ScoreListWnd_AddToList(ScoreListWnd* pthis, int32 score)
{
int i, j;
for(i = 0; i < MAX_LIST_LENGTH; i++)
{
if(score > pthis->scorelist[i]){
break;
}
}
if(i < MAX_LIST_LENGTH)
{
for(j = MAX_LIST_LENGTH-1; j > i; j --)
{
pthis->scorelist[j] = pthis->scorelist[j-1];
}
pthis->scorelist[i] = score;
return ScoreListWnd_SaveList(pthis);
}
return TRUE;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -