📄 gamedoc.cpp
字号:
// GameDoc.cpp: implementation of the JFZGameDoc class.
//
//////////////////////////////////////////////////////////////////////
#include "GameDoc.h"
#include "KeyControl.h"
#include "BaseView.h"
#include "LogoView.h"
#include "MenuView.h"
#include "AboutView.h"
#include "HelpView.h"
#include "OptView.h"
#include "GameView.h"
#include "OverView.h"
#include "Bitmap.h"
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CGameDoc::CGameDoc()
{
}
CGameDoc::~CGameDoc()
{
}
CGameDoc* CGameDoc::CreateInstance()
{
// 创建新的CBDocument实例
CGameDoc* pObj = new CGameDoc();
// 如果实例创建成功,调用初始化函数
if (pObj)
{
if (!pObj->InitData())
{
pObj->Release();
pObj = NULL;
}
}
// 返回实例指针
return pObj;
}
void CGameDoc::Release()
{
FreeData();
if (this)
delete this;
}
void CGameDoc::FreeData()
{
}
void CGameDoc::SetApp(CGameApp* pApp)
{
m_pApp = pApp;
}
boolean CGameDoc::SetControl(CKeyControl *pControl)
{
BEGIN_CHECK
{
CHECK_NULL(m_pKeyControl, pControl);
}
CATCH_CHECK
{
CUSTOM_RELEASE(m_pKeyControl);
return false;
}
END_CHECK
return true;
}
CKeyControl* CGameDoc::GetKeyControl()
{
return m_pKeyControl;
}
CBaseView* CGameDoc::GetCurView()
{
return m_pCurView;
}
boolean CGameDoc::SetCurView(CBaseView* pCurView)
{
BEGIN_CHECK
{
CHECK_NULL(m_pCurView, pCurView);
}
CATCH_CHECK
{
CUSTOM_RELEASE(m_pCurView);
return false;
}
END_CHECK
return true;
}
bool CGameDoc::InitData()
{
m_pLogoView = NULL;
m_pMenuView = NULL;
m_pAboutView = NULL;
m_pHelpView = NULL;
m_pOptView = NULL;
m_pGameView = NULL;
m_pOverView = NULL;
// 初始化当前视图为开始视图
m_nCurViewID = ID_VIEW_START;
m_bExitTimer = false;
// 初始化其它数据
return TRUE;
}
void CGameDoc::ReleaseView()
{
if (m_pLogoView)
{
m_pLogoView->FreeResourse();
delete m_pLogoView;
m_pLogoView = NULL;
}
if (m_pMenuView)
{
m_pMenuView->FreeResourse();
delete m_pMenuView;
m_pMenuView = NULL;
}
if (m_pAboutView)
{
m_pAboutView->FreeResourse();
delete m_pAboutView;
m_pAboutView = NULL;
}
if (m_pGameView)
{
m_pGameView->FreeResourse();
delete m_pGameView;
m_pGameView = NULL;
}
if (m_pHelpView)
{
m_pHelpView->FreeResourse();
delete m_pHelpView;
m_pHelpView = NULL;
}
// if (m_pOptView)
// {
// m_pOptView->FreeResourse();
// delete m_pOptView;
// m_pOptView = NULL;
// }
if (m_pOverView)
{
m_pOverView->FreeResourse();
delete m_pOverView;
m_pOverView = NULL;
}
}
void CGameDoc::SetLogoView(CLogoView* pLogoView)
{
m_pLogoView = pLogoView;
}
void CGameDoc::SwitchView(int16 nViewID)
{
// 切换视图前,全部释放
ReleaseView();
SetCurViewID(nViewID);
CBaseView* pView = NULL;
switch (nViewID)
{
// case ID_VIEW_START:
// break;
case ID_VIEW_MENU:
{
m_pMenuView = new CMenuView(this);
// 设置文档关联对象,开始时设置当前视图为开始
SetMenuView(m_pMenuView);
// 首先进入开始视图
m_pMenuView->OnStartView();
}
break;
case ID_VIEW_GAME:
{
m_pGameView = new CGameView(this);
// 设置文档关联对象,开始时设置当前视图为开始
SetGameView(m_pGameView);
// 首先进入开始视图
m_pGameView->OnStartView();
}
break;
case ID_VIEW_ABOUT:
{
m_pAboutView = new CAboutView(this);
// 设置文档关联对象,开始时设置当前视图为开始
SetAboutView(m_pAboutView);
// 首先进入开始视图
m_pAboutView->OnStartView();
}
break;
case ID_VIEW_HELP:
{
m_pHelpView = new CHelpView(this);
// 设置文档关联对象,开始时设置当前视图为开始
SetHelpView(m_pHelpView);
// 首先进入开始视图
m_pHelpView->OnStartView();
}
break;
// case ID_VIEW_SET:
// {
// m_pOptView = new JFZOptView(this);
//
// // 设置文档关联对象,开始时设置当前视图为开始
// SetOptView(m_pOptView);
// // 首先进入开始视图
// m_pOptView->OnStartView();
// }
// break;
// case ID_VIEW_STOP:
// {
// m_pOverView = new JFZOverView(this);
//
// // 设置文档关联对象,开始时设置当前视图为开始
// SetOverView(m_pOverView);
// // 首先进入开始视图
// m_pOverView->OnStartView();
// }
// break;
default:
break;
}
}
void CGameDoc::SetCurViewID(int16 nViewID)
{
m_nCurViewID = nViewID;
}
void CGameDoc::SetMenuView(CMenuView* pMenuView)
{
m_pMenuView = pMenuView;
}
CMenuView* CGameDoc::GetMenuView()
{
return m_pMenuView;
}
boolean CGameDoc::UpdateMenuView()
{
// 处理按键事件
HandleKeyEvent();
if (IsExitTimer())
{
SetExitTimer(false);
return false;
}
else
return true;
return false;
}
void CGameDoc::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:
// if (m_pKeyControl->IsAnyKeyPress())
// {
// m_pOverView->m_bReturnMeun = true;
// }
// break;
case ID_VIEW_GAME:
HandleGameKey(m_pKeyControl);
break;
default:
break;
}
}
void CGameDoc::HandleMenuKey(CKeyControl *pControl)
{
int nMenuIndex = m_pMenuView->GetMenuIndex(m_pMenuView->m_eCurMenu);
int nHitCount = 0;
nHitCount = m_pKeyControl->GetKeyHitCounts(EKEY_LEFT);
if (nHitCount != AVLID_KEY_PRESS_NUM)
{
if (pControl->GetKeyPressStatus(EKEY_LEFT) == false)
{
if (m_pMenuView->m_eCurMenu != EMENU_START)
{
if (nHitCount >= nMenuIndex)
{
// 按键次数大于或等于索引数,当前菜单项置为“开始”
MAINMENU eMenu = m_pMenuView->GetMenuFromIndex(MENU_TEXT_NUM - (nHitCount - nMenuIndex));
m_pMenuView->m_eCurMenu = eMenu;
}
else
{
// 设置当前高亮菜单
MAINMENU eMenu = m_pMenuView->GetMenuFromIndex(nMenuIndex - nHitCount);
m_pMenuView->m_eCurMenu = eMenu;
}
}
else
m_pMenuView->m_eCurMenu = EMENU_STOP;
pControl->SetKeyPressStatus(EKEY_LEFT, true);
}
}
// 判断下按键
nHitCount = pControl->GetKeyHitCounts(EKEY_RIGHT);
if (nHitCount != AVLID_KEY_PRESS_NUM)
{
if (pControl->GetKeyPressStatus(EKEY_RIGHT) == false)
{
if (m_pMenuView->m_eCurMenu != EMENU_STOP)
{
if (nHitCount > (MENU_TEXT_NUM - nMenuIndex))
{
MAINMENU eMenu = m_pMenuView->GetMenuFromIndex(nHitCount - (MENU_TEXT_NUM - nMenuIndex));
m_pMenuView->m_eCurMenu = eMenu;
}
else
{
MAINMENU eMenu = m_pMenuView->GetMenuFromIndex(nMenuIndex + nHitCount);
m_pMenuView->m_eCurMenu = eMenu;
}
}
else
m_pMenuView->m_eCurMenu = EMENU_START;
pControl->SetKeyPressStatus(EKEY_RIGHT, true);
}
}
// 判断选择键
nHitCount = pControl->GetKeyHitCounts(EKEY_SELECT);
if (nHitCount != AVLID_KEY_PRESS_NUM)
{
if (pControl->GetKeyPressStatus(EKEY_SELECT) == false)
{
pControl->SetKeyPressStatus(EKEY_SELECT, true);
m_bContinueGame = FALSE;
// 继续
if (m_pMenuView->m_eCurMenu == EMENU_CONTINUE)
{
m_bContinueGame = TRUE;
}
// 按下选择键,进入相应的视图界面
int nViewID = GetViewID();
m_pMenuView->ExitView(nViewID);
}
}
}
int CGameDoc::GetViewID()
{
int nViewID = 0;
MAINMENU eMenu = m_pMenuView->m_eCurMenu;
switch (eMenu)
{
case EMENU_START:
nViewID = ID_VIEW_GAME;
break;
// case EMENU_OPTION:
// 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 CGameDoc::SetAboutView(CAboutView* pAoutView)
{
m_pAboutView = pAoutView;
}
boolean CGameDoc::IsExitTimer()
{
return m_bExitTimer;
}
void CGameDoc::SetExitTimer(boolean bExit)
{
m_bExitTimer = bExit;
}
boolean CGameDoc::UpdateLogoView()
{
// 处理按键事件
HandleKeyEvent();
if(IsExitTimer())
{
m_bExitTimer = false;
return false;
}
else
{
return true;
}
return false;
}
boolean CGameDoc::UpdateAboutView()
{
// 处理按键事件
HandleKeyEvent();
if (IsExitTimer())
{
m_bExitTimer = false;
return false;
}
else
return true;
return false;
}
void CGameDoc::HandleAboutKey(CKeyControl* pControl)
{
int nHitCount = 0;
// 判断选择键
nHitCount = pControl->GetKeyHitCounts(EKEY_SELECT) + pControl->GetKeyHitCounts(EKEY_CLR);
if (nHitCount != AVLID_KEY_PRESS_NUM)
{
if ((pControl->GetKeyPressStatus(EKEY_SELECT)) == false
&& (pControl->GetKeyPressStatus(EKEY_CLR)) == false)
{
pControl->SetKeyPressStatus(EKEY_SELECT, true);
pControl->SetKeyPressStatus(EKEY_CLR, true);
m_pAboutView->ExitView();
}
}
// 判断向下键
nHitCount = pControl->GetKeyHitCounts(EKEY_DOWN);
if (nHitCount != AVLID_KEY_PRESS_NUM)
{
if ((pControl->GetKeyPressStatus(EKEY_DOWN)) == false)
{
if (m_pAboutView->m_nTextIndex < 3)
m_pAboutView->m_nTextIndex++;
pControl->SetKeyPressStatus(EKEY_DOWN, true);
}
}
// 判断向上键
nHitCount = pControl->GetKeyHitCounts(EKEY_UP);
if (nHitCount != AVLID_KEY_PRESS_NUM)
{
if ((pControl->GetKeyPressStatus(EKEY_UP)) == false)
{
if (m_pAboutView->m_nTextIndex > 0)
m_pAboutView->m_nTextIndex--;
pControl->SetKeyPressStatus(EKEY_UP, true);
}
}
}
void CGameDoc::SetHelpView(CHelpView* pHelpView)
{
m_pHelpView = pHelpView;
}
boolean CGameDoc::UpdateHelpView()
{
// 处理按键事件
HandleKeyEvent();
if (IsExitTimer())
{
m_bExitTimer = false;
return false;
}
else
return true;
return false;
}
void CGameDoc::HandleHelpKey(CKeyControl* pControl)
{
int nHitCount = 0;
// 判断选择键
nHitCount = pControl->GetKeyHitCounts(EKEY_SELECT) + pControl->GetKeyHitCounts(EKEY_CLR);
if (nHitCount != AVLID_KEY_PRESS_NUM)
{
if ((pControl->GetKeyPressStatus(EKEY_SELECT)) == false
&& (pControl->GetKeyPressStatus(EKEY_CLR)) == false)
{
pControl->SetKeyPressStatus(EKEY_SELECT, true);
pControl->SetKeyPressStatus(EKEY_CLR, true);
m_pHelpView->ExitView();
}
}
// 判断向下键
nHitCount = pControl->GetKeyHitCounts(EKEY_DOWN);
if (nHitCount != AVLID_KEY_PRESS_NUM)
{
if ((pControl->GetKeyPressStatus(EKEY_DOWN)) == false)
{
if (m_pAboutView->m_nTextIndex < 3)
m_pAboutView->m_nTextIndex++;
pControl->SetKeyPressStatus(EKEY_DOWN, true);
}
}
// 判断向上键
nHitCount = pControl->GetKeyHitCounts(EKEY_UP);
if (nHitCount != AVLID_KEY_PRESS_NUM)
{
if ((pControl->GetKeyPressStatus(EKEY_UP)) == false)
{
if (m_pAboutView->m_nTextIndex > 0)
m_pAboutView->m_nTextIndex--;
pControl->SetKeyPressStatus(EKEY_UP, true);
}
}
}
//void JFZGameDoc::SetOptView(JFZOptView* pOptView)
//{
// m_pOptView = pOptView;
//}
//
//boolean JFZGameDoc::UpdateOptView()
//{
// // 处理按键事件
// HandleKeyEvent();
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -