📄 ppgamedoc.cpp
字号:
// 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 + -