⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 scorelistwnd.c

📁 俄罗斯方块的整套源代码
💻 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 + -