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

📄 gameapp.cpp

📁 看到有兄弟提出的半透明算法
💻 CPP
字号:
// GameApp.cpp: implementation of the JFZGameApp class.
//
//////////////////////////////////////////////////////////////////////

#include "GameApp.h"
#include "GameDoc.h"
#include "KeyControl.h"
#include "BaseView.h"
#include "LogoView.h"
#include "AboutView.h"
#include "HelpView.h"
#include "GameView.h"

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

//CGameApp::CGameApp()
//{
//
//}
//
//CGameApp::~CGameApp()
//{
//
//}

extern "C" {
	
int AEEClsCreateInstance(AEECLSID ClsId, IShell* pIShell, IModule* po, void ** ppObj)
{
	*ppObj = NULL;
	
	if (ClsId == AEECLSID_EIDOLON)
	{
		// 创建小应用程序
		if (!AEEApplet_New(sizeof(CGameApp), ClsId, pIShell, po, (IApplet**)ppObj,
			(AEEHANDLER)CGameApp::HandleEvent, (PFNFREEAPPDATA)CGameApp::FreeData)
			== TRUE)
		{
			return EFAILED;
		}

		// 初始化数据
		if (!CGameApp::InitAppData((IApplet*)*ppObj))
		{
			return EFAILED;
		}
		
		// Add your code here .....
		
		return AEE_SUCCESS;
	}
	
	return (EFAILED);
}
	
}   // end of extern "C"


boolean CGameApp::HandleEvent(CGameApp* pApp, AEEEvent eCode, uint16 wParam, uint32 dwParam)
{
	return pApp->OnEvent(eCode, wParam, dwParam);
}

void CGameApp::FreeData(CGameApp* pApp)
{
	pApp->Release();
}

boolean CGameApp::InitAppData(IApplet* pIApplet)
{
	CGameApp* pApp = (CGameApp*) pIApplet;
    return pApp->InitData();
}

void CGameApp::Release()
{
	// 释放出是分配的资源
	if (m_pDoc)
	{
		// 释放视图
		m_pDoc->ReleaseView();

		// 视图置为空
		m_pDoc->SetCurView(NULL);

		// 释放控制器
		if (m_pDoc->GetKeyControl())
		{
			m_pDoc->GetKeyControl()->Release();
			m_pDoc->SetControl(NULL);
		}

		// 释放文档
		m_pDoc->Release();
		m_pDoc = NULL;
	}
}

boolean CGameApp::InitData()
{
	// 类成员设置缺省值
	m_pDoc      = NULL;

	BEGIN_CHECK
	{
		// 创建文档模板
		CHECK_FALSE(CreateDocumentTemplate());
	}
	CATCH_CHECK
	{
		return FALSE;
	}
	END_CHECK

	// 获取文件声音配置数据
//	GetSoundCfgData();

	m_bVibrate = false;

	return TRUE;
}

boolean CGameApp::OnEvent(AEEEvent eCode, uint16 wParam, uint32 dwParam)
{
	switch (eCode) 
	{
	case EVT_APP_START:
		{
			m_pDoc->m_pLogoView = new CLogoView(m_pDoc);

			// 设置文档关联对象,开始时设置当前视图为开始 
			m_pDoc->SetLogoView(m_pDoc->m_pLogoView);
			m_pDoc->m_pLogoView->OnStartView();
		}
		return true;
	case EVT_KEY:
		return true;
	case EVT_KEY_PRESS:
		if (m_pDoc->m_nCurViewID == ID_VIEW_ABOUT && wParam != AVK_SELECT && wParam != AVK_CLR && wParam != AVK_5)
		{
			if (wParam == AVK_2)
				return IHTMLVIEWER_HandleEvent((m_pDoc->m_pAboutView->m_pHtmlView),EVT_KEY,AVK_UP, dwParam);
			else if (wParam == AVK_4)
				return IHTMLVIEWER_HandleEvent((m_pDoc->m_pAboutView->m_pHtmlView),EVT_KEY,AVK_LEFT, dwParam);
			else if (wParam == AVK_6)
				return IHTMLVIEWER_HandleEvent((m_pDoc->m_pAboutView->m_pHtmlView),EVT_KEY,AVK_RIGHT, dwParam);
			else if (wParam == AVK_8)
				return IHTMLVIEWER_HandleEvent((m_pDoc->m_pAboutView->m_pHtmlView),EVT_KEY,AVK_DOWN, dwParam);
			else
				return IHTMLVIEWER_HandleEvent((m_pDoc->m_pAboutView->m_pHtmlView),EVT_KEY,wParam, dwParam);
		}
		else if (m_pDoc->m_nCurViewID == ID_VIEW_HELP && wParam != AVK_SELECT && wParam != AVK_CLR && wParam != AVK_5)
		{
			if (wParam == AVK_2)
				return IHTMLVIEWER_HandleEvent((m_pDoc->m_pHelpView->m_pHtmlView),EVT_KEY,AVK_UP, dwParam);
			else if (wParam == AVK_4)
				return IHTMLVIEWER_HandleEvent((m_pDoc->m_pHelpView->m_pHtmlView),EVT_KEY,AVK_LEFT, dwParam);
			else if (wParam == AVK_6)
				return IHTMLVIEWER_HandleEvent((m_pDoc->m_pHelpView->m_pHtmlView),EVT_KEY,AVK_RIGHT, dwParam);
			else if (wParam == AVK_8)
				return IHTMLVIEWER_HandleEvent((m_pDoc->m_pHelpView->m_pHtmlView),EVT_KEY,AVK_DOWN, dwParam);
			else
				return IHTMLVIEWER_HandleEvent((m_pDoc->m_pHelpView->m_pHtmlView),EVT_KEY,wParam, dwParam);
		}
		else if (m_pDoc->m_nCurViewID == ID_VIEW_GAME && wParam != AVK_SELECT && wParam != AVK_CLR && wParam != AVK_5)
		{
//			if (m_pDoc->m_pGameView->m_nCurGameStatus == 2)
//			{
//				if (wParam == AVK_2)
//				return IHTMLVIEWER_HandleEvent((m_pDoc->m_pGameView->m_pHtmlView),EVT_KEY,AVK_UP, dwParam);
//			else if (wParam == AVK_4)
//				return IHTMLVIEWER_HandleEvent((m_pDoc->m_pGameView->m_pHtmlView),EVT_KEY,AVK_LEFT, dwParam);
//			else if (wParam == AVK_6)
//				return IHTMLVIEWER_HandleEvent((m_pDoc->m_pGameView->m_pHtmlView),EVT_KEY,AVK_RIGHT, dwParam);
//			else if (wParam == AVK_8)
//				return IHTMLVIEWER_HandleEvent((m_pDoc->m_pGameView->m_pHtmlView),EVT_KEY,AVK_DOWN, dwParam);
//			else
//				return IHTMLVIEWER_HandleEvent((m_pDoc->m_pGameView->m_pHtmlView),EVT_KEY,wParam, dwParam);
//			}
// 			else
				return m_pDoc->GetKeyControl()->HandleKeyPress(eCode, wParam, dwParam);
		}
		else
			return m_pDoc->GetKeyControl()->HandleKeyPress(eCode, wParam, dwParam);
	case EVT_KEY_RELEASE:
		return m_pDoc->GetKeyControl()->HandleKeyRelease(eCode, wParam, dwParam);
	case EVT_APP_STOP:
		return true;
	case EVT_APP_SUSPEND:
		m_pDoc->GetCurView()->OnSuspend();
		return true;
	case EVT_APP_RESUME:
		m_pDoc->GetCurView()->OnResume();
		return true;
	case EVT_APP_NO_SLEEP:// 禁止节电模式
		return true;
	default:
		break;
	}

    return false;
}

boolean CGameApp::CreateDocumentTemplate()
{
	CGameDoc* pDoc    = NULL;
	CKeyControl* pControl = NULL;

	BEGIN_CHECK
	{
		// 创建文档
		CHECK_NULL(pDoc, CGameDoc::CreateInstance());
		// 创建控制器
		CHECK_NULL(pControl, CKeyControl::CreateInstance(pDoc));
	}
	CATCH_CHECK
	{
		// 创建失败
		CUSTOM_RELEASE(pDoc);
		CUSTOM_RELEASE(pControl);
		return FALSE;
	}
	END_CHECK

	pDoc->SetControl(pControl);

	// 记录文档指针
	m_pDoc = pDoc;

	pDoc->SetApp(this);

	// 创建成功
	return true;
}

void CGameApp::GetSoundCfgData()
{
	IFileMgr* pIFileMgr = NULL;	// 文件接口
	IFile* pIFile;		// 文件操作借口

	BEGIN_CHECK
	{
		// 创建文件接口
		CHECK_ERROR(ISHELL_CreateInstance(m_pIShell, AEECLSID_FILEMGR, (void**)&pIFileMgr));
	}
	CATCH_CHECK
	{
		IRELEASE(pIFileMgr, FILEMGR);
		return;
	}
	END_CHECK

	// 文件不存在,创建文件
	if (IFILEMGR_Test(pIFileMgr, SOUND_CFG_FILE) == SUCCESS)
	{
		// 打开声音配置文件
		pIFile = IFILEMGR_OpenFile(pIFileMgr, SOUND_CFG_FILE, _OFM_READWRITE);
		
		if (pIFile == NULL)
		{
			IRELEASE(pIFileMgr, FILEMGR);
			return;
		}
		
		// 将原始数据读出
		IFILE_Read(pIFile, &m_tOpenSound, sizeof(SOUNDCFG));
		
		// 关闭文件
		IRELEASE(pIFile, FILE);
	}
	else	
	{
		pIFile = IFILEMGR_OpenFile(pIFileMgr, SOUND_CFG_FILE, _OFM_CREATE);
		
		if (pIFile == NULL)
		{
			IRELEASE(pIFileMgr, FILEMGR);
			return;
		}
		
		m_tOpenSound.bOpenSound = false;
		IFILE_Write(pIFile, &m_tOpenSound, sizeof(SOUNDCFG));
		
		// 关闭文件
		IRELEASE(pIFile, FILE);
	}
	
	IRELEASE(pIFileMgr, FILEMGR);
}

boolean CGameApp::GetSoundCfg()
{
	return m_tOpenSound.bOpenSound;
}

void CGameApp::SetSoundCfgData(boolean bOpenSound)
{
	m_tOpenSound.bOpenSound = bOpenSound;
}

void CGameApp::SetVibrate(boolean bVibrate)
{
	m_bVibrate = bVibrate;
}

boolean CGameApp::GetVibrate()
{
	return m_bVibrate;
}

void CGameApp::WtriteSoundCfg(boolean bOpenSound)
{
	IFileMgr* pIFileMgr = NULL;	// 文件接口
	IFile* pIFile;		// 文件操作借口
	SOUNDCFG tOpenSound;
	tOpenSound.bOpenSound = bOpenSound;

	BEGIN_CHECK
	{
		// 创建文件接口
		CHECK_ERROR(ISHELL_CreateInstance(m_pIShell, AEECLSID_FILEMGR, (void**)&pIFileMgr));
	}
	CATCH_CHECK
	{
		IRELEASE(pIFileMgr, FILEMGR);
		return;
	}
	END_CHECK
		
	// 文件不存在,创建文件
	if (IFILEMGR_Test(pIFileMgr, SOUND_CFG_FILE) == SUCCESS)
	{
		// 打开声音配置文件
		pIFile = IFILEMGR_OpenFile(pIFileMgr, SOUND_CFG_FILE, _OFM_READWRITE);
		
		if (pIFile == NULL)
		{
			IRELEASE(pIFileMgr, FILEMGR);
			return;
		}
		
		// 写声音配置数据
		IFILE_Write(pIFile, &tOpenSound, sizeof(SOUNDCFG));
		
		// 关闭文件
		IFILE_Release(pIFile);
	}
	else	
	{
		pIFile = IFILEMGR_OpenFile(pIFileMgr, SOUND_CFG_FILE, _OFM_CREATE);
		
		if (pIFile == NULL)
		{
			IRELEASE(pIFileMgr, FILEMGR);
			return;
		}
		
		IFILE_Write(pIFile, &tOpenSound, sizeof(SOUNDCFG));
		
		// 关闭文件
		IFILE_Release(pIFile);
	}
	
	IRELEASE(pIFileMgr, FILEMGR);
}

⌨️ 快捷键说明

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