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

📄 ppgamedoc.cpp

📁 一个点泡泡游戏
💻 CPP
📖 第 1 页 / 共 3 页
字号:
// PPGameDoc.cpp: implementation of the CPPGameDoc class.
//
//////////////////////////////////////////////////////////////////////

#include "PPGameDoc.h"
#include "PPKeyControl.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"

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

CPPGameDoc::CPPGameDoc()
{
}

CPPGameDoc::~CPPGameDoc()
{

}

CPPGameDoc* CPPGameDoc::CreateInstance()
{
	// 创建新的CBDocument实例
	CPPGameDoc* pObj = new CPPGameDoc();
	
	// 如果实例创建成功,调用初始化函数
	if (pObj)
	{
		if (!pObj->InitData())
		{
			pObj->Release();
			pObj = NULL;
		}
	}

	// 返回实例指针
	return pObj;
}

bool CPPGameDoc::InitData()
{
	m_pLogoView = NULL;
	m_pMenuView = NULL;

	// 初始化当前视图为开始视图
	m_nCurViewID = ID_VIEW_START;

	m_nDiamondCount = 0;
	
	m_tGameScore.nLevel = 1;
	m_tGameScore.nScore = 0;

	m_nDemoDiamondIndex = 36;
	m_nDemoKeyIndex = 0;

	m_bExitTimer = false;

	return TRUE;
}

void CPPGameDoc::Release()
{
	FreeData();
	if (this)
		delete this;
}

void CPPGameDoc::FreeData()
{
}

boolean CPPGameDoc::SetCurView(CPPBaseView* pCurView)
{
	BEGIN_CHECK
	{
		CHECK_NULL(m_pCurView, pCurView);
	}
	CATCH_CHECK
	{
		CUSTOM_RELEASE(m_pCurView);
		return false;
	}
	END_CHECK

	return true;
}

CPPBaseView* CPPGameDoc::GetCurView()
{
	return m_pCurView;
}

CPPLogoView* CPPGameDoc::GetLogoView()
{
	return m_pLogoView;
}

void CPPGameDoc::SetLogoView(CPPLogoView* pLogoView)
{
	m_pLogoView = pLogoView;
}

boolean CPPGameDoc::SetControl(CPPKeyControl *pControl)
{
	BEGIN_CHECK
	{
		CHECK_NULL(m_pKeyControl, pControl);
	}
	CATCH_CHECK
	{
		CUSTOM_RELEASE(m_pKeyControl);
		return false;
	}
	END_CHECK
		
		return true;
}

boolean CPPGameDoc::UpdateLogoView()
{
	// 处理按键事件
	HandleKeyEvent();

	// 如果要切换位图
//	if (m_pLogoView->IsSwitchBmp())
//		return true;
//	else
//		return false;
	if(IsExitTimer())
	{
		m_bExitTimer = false;
		return false;
	}
	else
	{
		return true;
	}
}

void CPPGameDoc::HandleKeyEvent()
{
	// 判断是否有键按下,没有键按下不处理
	switch (m_nCurViewID)
	{
	case ID_VIEW_START:
		{
			if (m_pKeyControl->IsAnyKeyPress())
			{
				m_pLogoView->ExitView();
			}
		}
		break;
	case ID_VIEW_MENU:
		HandleMenuKey(m_pKeyControl);
		break;
	case ID_VIEW_ABOUT:
		HandleAboutKey(m_pKeyControl);
		break;
	case ID_VIEW_HELP:
		HandleHelpKey(m_pKeyControl);
		break;
	case ID_VIEW_SET:
		HandleOptKey(m_pKeyControl);
		break;
	case ID_VIEW_STOP:
		HandleOverKey(m_pKeyControl);
		break;
	case ID_VIEW_GAME:
		HandleGameKey(m_pKeyControl);
		break;
	default:
		break;
	}
}

CPPKeyControl* CPPGameDoc::GetKeyControl()
{
	return m_pKeyControl;
}

void CPPGameDoc::SetMenuView(CPPMenuView* pMenuView)
{
	m_pMenuView = pMenuView;
}

CPPMenuView* CPPGameDoc::GetMenuView()
{
	return m_pMenuView;
}

void CPPGameDoc::SwitchView(int16 nViewID)
{
	// 切换视图前,全部释放
	ReleaseView();

	CPPBaseView* pView = NULL;
	switch (nViewID)
	{
	case ID_VIEW_START:
//		pView = GetLogoView();
//		((CPPLogoView* )pView)->OnStartView();
		break;
	case ID_VIEW_MENU:
		{
			m_pMenuView = new CPPMenuView(this);

			// 设置文档关联对象,开始时设置当前视图为开始 
			SetMenuView(m_pMenuView);
			// 首先进入开始视图
			m_pMenuView->OnStartView();
		}
		break;
	case ID_VIEW_GAME:
		{
			m_pGameView = new CPPGameView(this);
			
			// 设置文档关联对象,开始时设置当前视图为开始 
			SetGameView(m_pGameView);
			// 首先进入开始视图
			m_pGameView->OnStartView();
		}
		break;
	case ID_VIEW_ABOUT:
		{
			m_pAboutView = new CPPAboutView(this);

			// 设置文档关联对象,开始时设置当前视图为开始 
			SetAboutView(m_pAboutView);
			// 首先进入开始视图
			m_pAboutView->OnStartView();
		}
		break;
	case ID_VIEW_HELP:
		{
			m_pHelpView = new CPPHelpView(this);
			
			// 设置文档关联对象,开始时设置当前视图为开始 
			SetHelpView(m_pHelpView);
			// 首先进入开始视图
			m_pHelpView->OnStartView();
		}
		break;
	case ID_VIEW_SET:
		{
			m_pOptView = new CPPSetView(this);
			
			// 设置文档关联对象,开始时设置当前视图为开始 
			SetOptView(m_pOptView);
			// 首先进入开始视图
			m_pOptView->OnStartView();
		}
		break;
	case ID_VIEW_STOP:
		{
			m_pOverView = new CPPOverView(this);
			
			// 设置文档关联对象,开始时设置当前视图为开始 
			SetOverView(m_pOverView);
			// 首先进入开始视图
			m_pOverView->OnStartView();
		}
		break;
	default:
		break;
	}

	SetCurViewID(nViewID);
}

boolean CPPGameDoc::UpdateMenuView()
{
	// 有键按下,计数器清零
	if (m_pKeyControl->IsAnyKeyPress())
	{
		m_pMenuView->RevertTimeCount();
	}

	//如果到一定时间未按键,进入演示视图
	if (m_pMenuView->GetTimeCount() >= 100)
	{
		m_bGameView = false;
		m_pMenuView->ExitView(ID_VIEW_GAME);

		m_nDemoDiamondIndex = 36;
		m_nDemoKeyIndex = 0;
		m_bExitTimer = false;
		return false;
	}
	else
	{
		// 处理按键事件
		HandleKeyEvent();
	}

	if (IsExitTimer())
	{
		m_bExitTimer = false;
		return false;
	}
	else
		return true;

	return false;
}

void CPPGameDoc::SetCurViewID(int16 nViewID)
{
	m_nCurViewID = nViewID;
}

void CPPGameDoc::HandleMenuKey(CPPKeyControl *pControl)
{
	int nMenuIndex = m_pMenuView->GetMenuIndex(m_pMenuView->GetCurMenu());
	int nHitCount = 0;

	nHitCount = m_pKeyControl->GetKeyHitCounts(EKEY_UP);
	if (nHitCount != AVLID_KEY_PRESS_NUM)
	{
		 if (m_pMenuView->GetCurMenu() != EMENU_START)
		 {
			if (nHitCount >= nMenuIndex)
			{
				// 按键次数大于或等于索引数,当前菜单项置为“开始”
				m_pMenuView->SetCurMenu(EMENU_START);
//				nViewID = ID_VIEW_GAME;// 视图ID变为游戏视图
			}
			else
			{
				// 设置当前高亮菜单
				MAINMENU eMenu = m_pMenuView->GetMenuFromIndex(nMenuIndex - nHitCount);
				m_pMenuView->SetCurMenu(eMenu);

				// 取得视图ID
//				nViewID = GetMenuIndex(m_eCurMenu);
			 }
		 }

		 pControl->ReleaseKeyPress(EKEY_UP, nHitCount);
	}

	// 判断下按键
	nHitCount = pControl->GetKeyHitCounts(EKEY_DOWN);
	if (nHitCount != AVLID_KEY_PRESS_NUM)
	{
		if (m_pMenuView->GetCurMenu() != EMENU_STOP)
		{
			if (nHitCount >= (ALL_MAIN_MENU_COUNT - nMenuIndex))
			{
				m_pMenuView->SetCurMenu(EMENU_STOP);
//				nViewID = 0;// 退出游戏,无视图
			}
			else
			{
				MAINMENU eMenu = m_pMenuView->GetMenuFromIndex(nMenuIndex + nHitCount);
				m_pMenuView->SetCurMenu(eMenu);

//				nViewID = GetMenuIndex(m_eCurMenu);
			}
		}

		pControl->ReleaseKeyPress(EKEY_DOWN, nHitCount);
	}

	// 判断选择键
	nHitCount = pControl->GetKeyHitCounts(EKEY_SELECT);
	if (nHitCount != AVLID_KEY_PRESS_NUM)
	{
		// 按下选择键,进入相应的视图界面
		int nViewID = GetViewID();

		if (m_pMenuView->GetCurMenu() == EMENU_DEMO)
		{
			m_bGameView = false;
			m_nDemoDiamondIndex = 36;
			m_nDemoKeyIndex = 0;
		}
		else if (m_pMenuView->GetCurMenu() == EMENU_START)
			m_bGameView = true;

		m_pMenuView->ExitView(nViewID);
	}
}

int CPPGameDoc::GetViewID()
{
	int nViewID = 0;
	MAINMENU eMenu = m_pMenuView->GetCurMenu();

	switch (eMenu)
	{
	case EMENU_START:
		nViewID = ID_VIEW_GAME;
		break;
	case EMENU_DEMO:
		nViewID = ID_VIEW_GAME;
		break;
	case EMENU_SET:
		nViewID = ID_VIEW_SET;
		break;
	case EMENU_HELP:
		nViewID = ID_VIEW_HELP;
		break;
	case EMENU_ABOUT:
		nViewID = ID_VIEW_ABOUT;
		break;
	case EMENU_STOP:
		nViewID = ID_VIEW_STOP;
		break;
	default:
		nViewID = ID_VIEW_MENU;
		break;
	}

	return nViewID;
}

void CPPGameDoc::SetAboutView(CPPAboutView* pAoutView)
{
	m_pAboutView = pAoutView;
}

CPPAboutView* CPPGameDoc::GetAboutView()
{
	return m_pAboutView;
}

boolean CPPGameDoc::UpdateAboutView()
{
	// 处理按键事件
	HandleKeyEvent();
	
	if (IsExitTimer())
	{
		m_bExitTimer = false;
		return false;
	}
	else
		return true;
	
	return false;
}

void CPPGameDoc::HandleAboutKey(CPPKeyControl* pControl)
{
	if (pControl->IsAnyKeyPress())
	{
		m_pAboutView->ExitView();
	}
}

CPPHelpView* CPPGameDoc::GetHelpView()
{
	return m_pHelpView;
}

void CPPGameDoc::SetHelpView(CPPHelpView* pHelpView)
{
	m_pHelpView = pHelpView;
}

boolean CPPGameDoc::UpdateHelpView()
{
	// 处理按键事件
	HandleKeyEvent();
	
	if (IsExitTimer())
	{
		m_bExitTimer = false;
		return false;
	}
	else
		return true;
	
	return false;
}

void CPPGameDoc::HandleHelpKey(CPPKeyControl* pControl)
{
	if (pControl->IsAnyKeyPress())
	{
		m_pHelpView->ExitView();
	}
}

CPPOverView* CPPGameDoc::GetExitView()
{
	return m_pOverView;
}

boolean CPPGameDoc::UpdateOverView()
{
	// 处理按键事件
	HandleKeyEvent();
	
	if (IsExitTimer())
	{
		m_bExitTimer = false;
		return false;
	}
	else
		return true;
	
	return false;
}

void CPPGameDoc::HandleOverKey(CPPKeyControl* pControl)
{
//	int nMenuIndex = m_pMenuView->GetMenuIndex(m_pMenuView->GetCurMenu());
	int nHitCount = 0;

	// 左软键按下,重新进入游戏视图
	nHitCount = m_pKeyControl->GetKeyHitCounts(EKEY_LEFTSOFT);
	if (nHitCount != AVLID_KEY_PRESS_NUM)

⌨️ 快捷键说明

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