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

📄 ppgameapp.cpp

📁 一个点泡泡游戏
💻 CPP
字号:
// PPGameApp.cpp: implementation of the CPPGameApp class.
//
//////////////////////////////////////////////////////////////////////

#include "PPGameApp.h"
#include "PPGameDoc.h"
#include "PPBaseView.h"
#include "PPLogoView.h"
#include "PPMenuView.h"
#include "PPAboutView.h"
#include "PPHelpView.h"
#include "PPOverView.h"
#include "PPSetView.h"
#include "PPGameView.h"

#include "PPGameDoc.h"

#include "PPKeyControl.h"
#include "PPBitmap.h"

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

//CPPGameApp::CPPGameApp()
//{
//
//}
//
//CPPGameApp::~CPPGameApp()
//{
//
//}

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

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


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

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

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

void CPPGameApp::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;
	}

	// 释放应用程序堆
	IRELEASE(m_pIHeap, HEAP);
}

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

	BEGIN_CHECK
	{
		// 创建应用程序堆
		CHECK_ERROR(ISHELL_CreateInstance(m_pIShell, AEECLSID_HEAP, (void**)&m_pIHeap));
		// 创建文档模板
		CHECK_FALSE(CreateDocumentTemplate());
	}
	CATCH_CHECK
	{
		// 创建失败
		IRELEASE(m_pIHeap, HEAP);
		return FALSE;
	}
	END_CHECK

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

	return TRUE;
}

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

			// 设置文档关联对象,开始时设置当前视图为开始 
			m_pDoc->SetLogoView(m_pDoc->m_pLogoView);
			m_pDoc->m_pLogoView->OnStartView();
		}
        return true;
	case EVT_KEY_PRESS:
		return m_pDoc->GetKeyControl()->HandleKeyPress(eCode, wParam, dwParam);
//	case EVT_KEY_RELEASE:
//		return m_pDoc->GetControl()->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 CPPGameApp::CreateDocumentTemplate()
{
	CPPGameDoc* pDoc    = NULL;
	CPPKeyControl* pControl = NULL;

	BEGIN_CHECK
	{
		// 创建文档
		CHECK_NULL(pDoc, CPPGameDoc::CreateInstance());
		// 创建控制器
		CHECK_NULL(pControl, CPPKeyControl::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 CPPGameApp::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));

		// 关闭文件
//		IFILE_Release(pIFile);
		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));

		// 关闭文件
//		IFILE_Release(pIFile);
		IRELEASE(pIFile, FILE);
	}

	IRELEASE(pIFileMgr, FILEMGR);
}

bool CPPGameApp::GetSoundCfg()
{
	return m_tOpenSound.bOpenSound;
}

void CPPGameApp::SetSoundCfgData(bool bOpenSound)
{
	m_tOpenSound.bOpenSound = bOpenSound;
}

⌨️ 快捷键说明

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