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

📄 znscore.c

📁 基于BREW 2.0 开发的冒险类手机游戏
💻 C
📖 第 1 页 / 共 3 页
字号:
	if(pZnScore->m_pBuf)
	{
		FREE(pZnScore->m_pBuf);
		pZnScore->m_pBuf = NULL;
	}
	pZnScore->m_pBuf = MALLOC(pZnScore->m_NetData.dwBufLen);
	ZnNet_NetRead(&pZnScore->m_ZnNet, pZnScore->m_pBuf, (uint16)pZnScore->m_NetData.dwBufLen, (PFNNOTIFY)ZnScore_OnRead3, pZnScore);
}

void ZnScore_OnRead3(PZNSCORE pZnScore)
{
	if(pZnScore->m_ZnNet.m_LastResult != ERR_SUCCESS)
	{
		pZnScore->m_ErrorType = ET_NETERROR;
		ZnScore_ChangeGui(pZnScore, GS_ERROR);
		return;
	}

	ZnNet_ReleaseNet(&pZnScore->m_ZnNet);
	// Build HTML
	ZnScore_BuildHTML(pZnScore);

	FREE(pZnScore->m_pBuf);
	pZnScore->m_pBuf = NULL;
}

boolean ZnScore_InitIfQuery(PZNSCORE pZnScore)
{
	if(pZnScore->m_bUploaded)
	{
		// Uploaded
		if(pZnScore->m_bUpdated)
		{
			// Updated
			AECHAR aszTemp[] = { // 分数已成功上传!是否查看高分榜?
				0x5206, 0x6570, 0x5DF2, 0x6210, 0x529F, 0x4E0A, 0x4F20, 0xFF01, 0x662F, 0x5426, 0x67E5, 0x770B, 0x9AD8, 0x5206, 0x699C, 0xFF1F, 0, 0};

			if(!ZnScore_ShowQuestion(pZnScore, aszTemp))
				return FALSE;
		}
		else
		{
			// Not Updated
			AECHAR aszTemp[] = { // 分数没有服务器端原分数高,未更新。是否查看高分榜?
				0x5206, 0x6570, 0x6CA1, 0x6709, 0x670D, 0x52A1, 0x5668, 0x7AEF, 0x539F, 0x5206, 0x6570, 0x9AD8, 0xFF0C, 0x672A, 0x66F4, 0x65B0, 0x3002, 0x662F, 0x5426, 0x67E5, 0x770B, 0x9AD8, 0x5206, 0x699C, 0xFF1F, 0, 0};

			if(!ZnScore_ShowQuestion(pZnScore, aszTemp))
				return FALSE;
		}
	}
	else
	{
		pZnScore->m_ErrorType = ET_NETERROR;
		ZnScore_ChangeGui(pZnScore, GS_ERROR);
	}

	return TRUE;
}

void ZnScore_ReleaseIfQuery(PZNSCORE pZnScore)
{
	ZnScore_ReleaseQuestion(pZnScore);
}

boolean ZnScore_HandleEventIfQuery(PZNSCORE pZnScore, AEEEvent eCode, uint16 wParam, uint32 dwParam)
{
	if(pZnScore->m_pMenu && pZnScore->m_pStatic)
	{
		if(IMENUCTL_HandleEvent(pZnScore->m_pMenu, eCode, wParam, dwParam))
			return TRUE;
		if(ISTATIC_HandleEvent(pZnScore->m_pStatic, eCode, wParam, dwParam))
			return TRUE;
	}
	
	switch(eCode)
	{
	case EVT_KEY:
		if(wParam == AVK_CLR)
		{
			ZnScore_Exit(pZnScore);
			return TRUE;
		}
		break;
	case EVT_COMMAND:
		switch(wParam)
		{
		case _MENU_ITEM_BASE_:			// OK
			MEMSET(&pZnScore->m_NetData, 0, sizeof(NETDATA));
			pZnScore->m_NetData.dwGameID = pZnScore->m_dwGameID;
			pZnScore->m_NetData.dwNetDataType = NDT_QUERYPLACE;
			pZnScore->m_NetData.dwUpperPhoneNum = (DWORD)FDIV(pZnScore->m_dbPhoneNum, 1000000);
			pZnScore->m_NetData.dwLowerPhoneNum = (DWORD)FSUB(pZnScore->m_dbPhoneNum, FMUL(pZnScore->m_NetData.dwUpperPhoneNum, 1000000));
			
			ZnNet_ReleaseNet(&pZnScore->m_ZnNet);
			ZnNet_InitNet(&pZnScore->m_ZnNet, pZnScore->m_App);
			
			IMENUCTL_SetActive(pZnScore->m_pMenu, FALSE);
			ISTATIC_SetActive(pZnScore->m_pStatic, FALSE);
			ZnNet_Connect(&pZnScore->m_ZnNet, _SCORE_SVR_ADDR_, _SCORE_SVR_PORT_, (PFNNOTIFY)ZnScore_OnConnect2, pZnScore);

			ZnScore_ChangeGui(pZnScore, GS_QUERY);
			return TRUE;
		case _MENU_ITEM_BASE_ + 1:		// Cancel
		//	pZnScore->m_pFnExit(pZnScore->m_pData);
			ZnScore_Exit(pZnScore);
			return TRUE;
		}
		break;
	case EVT_APP_SUSPEND:
		ZnNet_ReleaseNet(&pZnScore->m_ZnNet);
		return TRUE;
	case EVT_APP_RESUME:
		IMENUCTL_Redraw(pZnScore->m_pMenu);
		ISTATIC_Redraw(pZnScore->m_pStatic);
		return TRUE;
	}
	
	return FALSE;
}

void ZnScore_BuildHTML(PZNSCORE pZnScore)
{
	int i, nCount = pZnScore->m_NetData.dwBufLen / (sizeof(DWORD) * 3);
	PDWORD pdwData = (PDWORD)pZnScore->m_pBuf;
	DWORD dwScore, dwHigh, dwLow;
	byte * pBuf;

	// Allocated outside the normal initialization
	// Check if released when exit
	if(pZnScore->m_pHTMLBuffer)
	{
		FREE(pZnScore->m_pHTMLBuffer);
		pZnScore->m_pHTMLBuffer = NULL;
	}
	pZnScore->m_pHTMLBuffer = MALLOC(2048);
	if(pZnScore->m_pHTMLBuffer)
	{
		pBuf = pZnScore->m_pHTMLBuffer;
	}
	else
	{
		ZnScore_Exit(pZnScore);
		return;
	}

	if(pZnScore->m_NetData.dwUpperPhoneNum || pZnScore->m_NetData.dwLowerPhoneNum)
	{
		AECHAR aszTemp[64], aszFormat[] = { // 你上次输入的手机号码为:<br>%d%06d<br>
			0x4F60, 0x4E0A, 0x6B21, 0x8F93, 0x5165, 0x7684, 0x624B, 0x673A, 0x53F7, 0x7801, 0x4E3A, 0xFF1A, 0x003C, 0x0062, 0x0072, 0x003E, 0x0025, 0x0064, 0x0025, 0x0030, 0x0036, 0x0064, 0x003C, 0x0062, 0x0072, 0x003E, 0x000D, 0x000A, 0, 0};

		WSPRINTF(aszTemp, sizeof(aszTemp), aszFormat, pZnScore->m_NetData.dwUpperPhoneNum, pZnScore->m_NetData.dwLowerPhoneNum);
		WSTRTOUTF8(aszTemp, WSTRLEN(aszTemp), pBuf, 2048 - (pBuf - pZnScore->m_pHTMLBuffer));

		while(* pBuf != 0)
			pBuf ++;

		if(pZnScore->m_NetData.dwExData[0] == 0xFFFFFFFF)
		{
			AECHAR aszTemp[] = { // 没有进入高分榜。
				0x6CA1, 0x6709, 0x8FDB, 0x5165, 0x9AD8, 0x5206, 0x699C, 0x3002, 0x000D, 0x000A, 0, 0};

			WSTRTOUTF8(aszTemp, WSTRLEN(aszTemp), pBuf, 2048 - (pBuf - pZnScore->m_pHTMLBuffer));

			while(* pBuf != 0)
				pBuf ++;
		}
		else
		{
			AECHAR aszTemp[64], aszFormat[] = { // 在高分榜上排名第%d。
				0x5728, 0x9AD8, 0x5206, 0x699C, 0x4E0A, 0x6392, 0x540D, 0x7B2C, 0x0025, 0x0064, 0x3002, 0, 0};

			WSPRINTF(aszTemp, sizeof(aszTemp), aszFormat, pZnScore->m_NetData.dwExData[0] + 1);
			WSTRTOUTF8(aszTemp, WSTRLEN(aszTemp), pBuf, 2048 - (pBuf - pZnScore->m_pHTMLBuffer));

			while(* pBuf != 0)
				pBuf ++;
		}
	}
	else
	{
		AECHAR aszTemp[] = { // 本机没有号码记录。
			0x672C, 0x673A, 0x6CA1, 0x6709, 0x53F7, 0x7801, 0x8BB0, 0x5F55, 0x3002, 0, 0};

		WSTRTOUTF8(aszTemp, WSTRLEN(aszTemp), pBuf, 2048 - (pBuf - pZnScore->m_pHTMLBuffer));

		while(* pBuf != 0)
			pBuf ++;
	}

	{
		AECHAR aszTemp[] = { // <p align="center">高分榜</p>
			0x003C, 0x0070, 0x0020, 0x0061, 0x006C, 0x0069, 0x0067, 0x006E, 0x003D, 0x0022, 0x0063, 0x0065, 0x006E, 0x0074, 0x0065, 0x0072, 0x0022, 0x003E, 0x9AD8, 0x5206, 0x699C, 0x003C, 0x002F, 0x0070, 0x003E, 0, 0};

		WSTRTOUTF8(aszTemp, WSTRLEN(aszTemp), pBuf, 2048 - (pBuf - pZnScore->m_pHTMLBuffer));

		while(* pBuf != 0)
			pBuf ++;
	}

	for(i = 0; i < nCount; i ++)
	{
		AECHAR aszFormat[] = { // <font color="#FF0000">第%d名 分数 %d</font><br><font color="#00FF00">号码 %d%06d</font><br>
			0x003C, 0x0066, 0x006F, 0x006E, 0x0074, 0x0020, 0x0063, 0x006F, 0x006C, 0x006F, 0x0072, 0x003D, 0x0072, 0x0065, 0x0064, 0x003E, 0x7B2C, 0x0025, 0x0064, 0x540D, 0x0020, 0x5206, 0x6570, 0x0020, 0x0025, 0x0064, 0x003C, 0x002F, 0x0066, 0x006F, 0x006E, 0x0074, 0x003E, 0x003C, 0x0062, 0x0072, 0x003E,
			0x003C, 0x0066, 0x006F, 0x006E, 0x0074, 0x0020, 0x0063, 0x006F, 0x006C, 0x006F, 0x0072, 0x003D, 0x0067, 0x0072, 0x0065, 0x0065, 0x006E, 0x003E, 0x53F7, 0x7801, 0x0020, 0x0025, 0x0064, 0x0025, 0x0030, 0x0036, 0x0064, 0x003C, 0x002F, 0x0066, 0x006F, 0x006E, 0x0074, 0x003E, 0x003C, 0x0062, 0x0072, 0x003E, 0, 0};

		AECHAR aszTemp[256], * paszTemp;

		dwScore = pdwData[0];
		dwLow = pdwData[1];
		dwHigh = pdwData[2];

		pdwData += 3;

		WSPRINTF(aszTemp, sizeof(aszTemp), aszFormat, i + 1, dwScore, dwHigh, dwLow);

		paszTemp = aszTemp + WSTRLEN(aszTemp);
		paszTemp -= 19;
		// 隐去4-7位
		paszTemp[0] = '*';
		paszTemp[1] = '*';
		paszTemp[2] = '*';
		paszTemp[3] = '*';

		WSTRTOUTF8(aszTemp, WSTRLEN(aszTemp), pBuf, 2048 - (pBuf - pZnScore->m_pHTMLBuffer));

		while(* pBuf != 0)
			pBuf ++;

		if(pBuf > pZnScore->m_pHTMLBuffer + 2048)
			break;
	}

	ZnScore_ChangeGui(pZnScore, GS_QUERYRESULT);
}

boolean ZnScore_InitQueryResult(PZNSCORE pZnScore)
{
	AEERect Rect;

	SETAEERECT(&Rect, 0, 0, pZnScore->m_unScrWidth, pZnScore->m_unScrHeight);

	if(SUCCESS != ISHELL_CreateInstance(pZnScore->m_App.m_pIShell, AEECLSID_HTML, (void **)&pZnScore->m_pViewer))
		return FALSE;

	IHTMLVIEWER_SetProperties(pZnScore->m_pViewer, HVP_SCROLLBAR);
	IHTMLVIEWER_ParseBuffer(pZnScore->m_pViewer, (char *)pZnScore->m_pHTMLBuffer);

	IHTMLVIEWER_SetRect(pZnScore->m_pViewer, &Rect);
	IHTMLVIEWER_SetActive(pZnScore->m_pViewer, TRUE);

	IHTMLVIEWER_Redraw(pZnScore->m_pViewer);

	return TRUE;
}

boolean ZnScore_HandleEventQueryResult(PZNSCORE pZnScore, AEEEvent eCode, uint16 wParam, uint32 dwParam)
{
	if(pZnScore->m_pViewer)
	{
		if(IHTMLVIEWER_HandleEvent(pZnScore->m_pViewer, eCode, wParam, dwParam))
			return TRUE;
	}
	
	switch(eCode)
	{
	case EVT_KEY:
		switch(wParam)
		{
		case AVK_CLR:
			ZnScore_Exit(pZnScore);
			return TRUE;
		}
		break;
	case EVT_APP_SUSPEND:
		return TRUE;
	case EVT_APP_RESUME:
		IHTMLVIEWER_Redraw(pZnScore->m_pViewer);
		return TRUE;
	}
	
	return FALSE;
}

void ZnScore_ReleaseQueryResult(PZNSCORE pZnScore)
{
	if(pZnScore->m_pViewer)
	{
		IHTMLVIEWER_Release(pZnScore->m_pViewer);
		pZnScore->m_pViewer = NULL;
	}

	if(pZnScore->m_pHTMLBuffer)
	{
		FREE(pZnScore->m_pHTMLBuffer);
		pZnScore->m_pHTMLBuffer = NULL;
	}
}

void ZnScore_QueryList(PZNSCORE pZnScore, PFNNOTIFY pFnExit, void * pData)
{
	IFileMgr * pFileMgr;
	IFile * pFile;

	if(!pZnScore)
		return;

	pZnScore->m_pFnExit = pFnExit;
	pZnScore->m_pData = pData;
	pZnScore->m_GuiState = GS_NONE;

	MEMSET(&pZnScore->m_NetData, 0, sizeof(NETDATA));

	if(SUCCESS == ISHELL_CreateInstance(pZnScore->m_App.m_pIShell, AEECLSID_FILEMGR, (void **)&pFileMgr))
	{
		pFile = IFILEMGR_OpenFile(pFileMgr, _CONFIG_FILE_, _OFM_READ);

		if(pFile)
		{
			IFILE_Read(pFile, &pZnScore->m_NetData.dwLowerPhoneNum, sizeof(DWORD));
			IFILE_Read(pFile, &pZnScore->m_NetData.dwUpperPhoneNum, sizeof(DWORD));
			
			IFILE_Release(pFile);
		}

		IFILEMGR_Release(pFileMgr);
	}

	pZnScore->m_NetData.dwGameID = pZnScore->m_dwGameID;
	pZnScore->m_NetData.dwNetDataType = NDT_QUERYPLACE;
	
	ZnNet_ReleaseNet(&pZnScore->m_ZnNet);
	ZnNet_InitNet(&pZnScore->m_ZnNet, pZnScore->m_App);

	ZnNet_Connect(&pZnScore->m_ZnNet, _SCORE_SVR_ADDR_, _SCORE_SVR_PORT_, (PFNNOTIFY)ZnScore_OnConnect2, pZnScore);

	ZnScore_ChangeGui(pZnScore, GS_QUERY);
}

boolean ZnScore_InitQuery(PZNSCORE pZnScore)
{
	AECHAR aszWait[] = { // 请等待...
		0x8BF7, 0x7B49, 0x5F85, 0x002E, 0x002E, 0x002E, 0, 0};
		
	IDISPLAY_ClearScreen(pZnScore->m_App.m_pIDisplay);
	IDISPLAY_DrawText(pZnScore->m_App.m_pIDisplay, AEE_FONT_NORMAL, aszWait, -1, 0, 0, NULL, IDF_ALIGN_CENTER | IDF_ALIGN_MIDDLE);
	IDISPLAY_Update(pZnScore->m_App.m_pIDisplay);

	return TRUE;
}

boolean ZnScore_HandleEventQuery(PZNSCORE pZnScore, AEEEvent eCode, uint16 wParam, uint32 dwParam)
{
	switch(eCode)
	{
	case EVT_KEY:
		if(wParam == AVK_CLR)
		{
			ZnScore_ChangeGui(pZnScore, pZnScore->m_LastGuiState);
			return TRUE;
		}
		break;
	case EVT_APP_SUSPEND:
		ZnNet_ReleaseNet(&pZnScore->m_ZnNet);
		return TRUE;
	case EVT_APP_RESUME:
		ZnScore_ChangeGui(pZnScore, pZnScore->m_LastGuiState);
		return TRUE;
	}

	return FALSE;
}

void ZnScore_ReleaseQuery(PZNSCORE pZnScore)
{
	ZnNet_ReleaseNet(&pZnScore->m_ZnNet);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -