📄 ppgamedoc.cpp
字号:
{
pControl->ReleaseKeyPress(EKEY_LEFTSOFT, nHitCount);
// 按下选择键,进入相应的视图界面
m_pOverView->ExitView(ID_VIEW_GAME);
}
// 右软键按下,进入主菜单
// nHitCount = pControl->GetKeyHitCounts(EKEY_RIGHTSOFT);
// 设为选择键
nHitCount = pControl->GetKeyHitCounts(EKEY_SELECT);
if (nHitCount != AVLID_KEY_PRESS_NUM)
{
pControl->ReleaseKeyPress(EKEY_RIGHTSOFT, nHitCount);
m_pOverView->ExitView(ID_VIEW_MENU);
}
}
void CPPGameDoc::SetOverView(CPPOverView* pOverView)
{
m_pOverView = pOverView;
}
boolean CPPGameDoc::UpdateOptView()
{
// 处理按键事件
HandleKeyEvent();
if (IsExitTimer())
{
m_bExitTimer = false;
return false;
}
else
return true;
return false;
}
void CPPGameDoc::SetOptView(CPPSetView* pOptView)
{
m_pOptView = pOptView;
}
CPPSetView* CPPGameDoc::GetOptView()
{
return m_pOptView;
}
void CPPGameDoc::HandleOptKey(CPPKeyControl* pControl)
{
int nMenuIndex = m_pOptView->GetMenuIndex(m_pOptView->GetCurMenu());
int nHitCount = 0;
nHitCount = m_pKeyControl->GetKeyHitCounts(EKEY_UP);
if (nHitCount != AVLID_KEY_PRESS_NUM)
{
if (m_pOptView->GetCurMenu() != EMENU_OPEN_SOUND)
{
if (nHitCount >= nMenuIndex)
{
// 按键次数大于或等于索引数,当前菜单项置为“开始”
m_pOptView->SetCurMenu(EMENU_OPEN_SOUND);
// nViewID = ID_VIEW_GAME;// 视图ID变为游戏视图
}
else
{
// 设置当前高亮菜单
SETVIEWMENU eMenu = m_pOptView->GetMenuFromIndex(nMenuIndex - nHitCount);
m_pOptView->SetCurMenu(eMenu);
}
}
pControl->ReleaseKeyPress(EKEY_UP, nHitCount);
}
// 判断下按键
nHitCount = pControl->GetKeyHitCounts(EKEY_DOWN);
if (nHitCount != AVLID_KEY_PRESS_NUM)
{
if (m_pOptView->GetCurMenu() != EMENU_STOP)
{
if (nHitCount >= (ALL_SET_MENU_COUNT - nMenuIndex))
{
m_pOptView->SetCurMenu(EMENU_CLOSE_SOUND);
}
else
{
SETVIEWMENU eMenu = m_pOptView->GetMenuFromIndex(nMenuIndex + nHitCount);
m_pOptView->SetCurMenu(eMenu);
}
}
pControl->ReleaseKeyPress(EKEY_DOWN, nHitCount);
}
// 判断选择键
nHitCount = pControl->GetKeyHitCounts(EKEY_SELECT);
if (nHitCount != AVLID_KEY_PRESS_NUM)
{
// 按下选择键,设置声音当前状态,并记录至文件
if (m_pOptView->GetCurMenu() == EMENU_OPEN_SOUND)
{
m_pApp->SetSoundCfgData(true);
m_pOptView->WtriteSoundCfg(true);
}
else
{
m_pApp->SetSoundCfgData(false);
m_pOptView->WtriteSoundCfg(false);
}
// 返回主菜单
m_pOptView->ExitView(ID_VIEW_MENU);
return;
}
// 判断左软键
nHitCount = pControl->GetKeyHitCounts(EKEY_RIGHTSOFT);
if (nHitCount != AVLID_KEY_PRESS_NUM)
{
// 按下左软键,声音当前状态不变,返回主菜单
m_pOptView->ExitView(ID_VIEW_MENU);
return;
}
}
void CPPGameDoc::SetGameView(CPPGameView* pGameView)
{
m_pGameView = pGameView;
}
CPPGameView* CPPGameDoc::GetGameView()
{
return m_pGameView;
}
boolean CPPGameDoc::UpdateGameView()
{
// 处理按键事件
HandleKeyEvent();
if (IsExitTimer())
{
m_bExitTimer = false;
return false;
}
else if (m_bGameView)
{
// 不暂停就继续处理钻石数据
if (!m_pGameView->GetPauseStatus())
{
// 如果剩余行数为0,就重新开始初始化钻石数据
if (m_pGameView->GetCurRemainLine() == 0)
{
// 设置重画
m_pGameView->SetAllRedrawStatus(true);
// 到下一关
m_pGameView->AddLevel();
m_pGameView->SetDiamondLine();
for (int nRow =0; nRow < DIAMOND_ROW; nRow++)
{
for (int nCol = 0; nCol < DIAMOND_COL; nCol++)
{
m_pGameView->m_nDiamond[nRow][nCol][0] = 0;
m_pGameView->m_nDiamond[nRow][nCol][1] = -1;
m_pGameView->m_nDiamond[nRow][nCol][2] = 0;
// m_pGameView->InitDiamondData(false);
}
}
m_pGameView->InitDiamondData(false);
}
else// 如果剩余行数不为0,继续增加钻石
{
if (AddNewDiamond())
{
// 移动钻石填补空缺
MoveDiamond();
}
else
{
m_bExitTimer = false;
return false;
}
}
}
}
else // 演示
{
// 设置选择框的坐标变化
if (m_pGameView->GetTimeCount() != 0 && m_pGameView->GetTimeCount() % 6 == 0)
{
HandleDemoKey(m_pGameView->m_nDemoKeyPress[m_nDemoKeyIndex]);
m_nDemoKeyIndex++;
}
// 演示钻石变化
if (AddDemoDiamond())
{
// 移动钻石填补空缺
MoveDiamond();
}
else
{
m_bExitTimer = false;
return false;
}
}
return true;
}
void CPPGameDoc::SetApp(CPPGameApp* pApp)
{
m_pApp = pApp;
}
void CPPGameDoc::HandleGameKey(CPPKeyControl* pControl)
{
int nHitCount = 0;
// 如果是游戏状态,处理各按键
if (m_bGameView)
{
int nCurPointY = m_pGameView->GetSelectYPoint();// 当前Y坐标
int nCurPointX = m_pGameView->GetSelectXPoint();// 当前X坐标
nHitCount = m_pKeyControl->GetKeyHitCounts(EKEY_UP);
if (nHitCount != AVLID_KEY_PRESS_NUM)
{
if (!m_pGameView->GetPauseStatus())// 不是暂停
{
if (nCurPointX == 0)// 已经到最上层
{
nCurPointX = 10 - nHitCount % 10;
}
else
{
if (nHitCount > nCurPointX)
{
nCurPointX = 10 - (nHitCount - nCurPointX) % 10;
}
else
{
nCurPointX = nCurPointX - nHitCount;
}
}
// 重新设置坐标
m_pGameView->SetSelectXPoint((int16)nCurPointX);
m_pGameView->SetSelectMoveSta(true);
}
else
{
int nMenuIndex = m_pGameView->GetMenuIndex(m_pGameView->GetCurMenu());
if (m_pGameView->GetCurMenu() != EMENU_RETURN_GAME)
{
if (nHitCount >= nMenuIndex)
{
// 按键次数大于或等于索引数,当前菜单项置为“开始”
m_pGameView->SetCurMenu(EMENU_RETURN_GAME);
}
else
{
// 设置当前高亮菜单
GAMEMENU eMenu = m_pGameView->GetMenuFromIndex(nMenuIndex - nHitCount);
m_pGameView->SetCurMenu(eMenu);
}
}
}
// 释放按键
pControl->ReleaseKeyPress(EKEY_UP, nHitCount);
}
nHitCount = m_pKeyControl->GetKeyHitCounts(EKEY_DOWN);
if (nHitCount != AVLID_KEY_PRESS_NUM)
{
if (!m_pGameView->GetPauseStatus())// 不是暂停
{
if (nCurPointX == 9)// 已经到最下层
nCurPointX = nHitCount % 10 - 1;
else
{
if (nHitCount > 9 - nCurPointX)
nCurPointX = (nHitCount - (9 - nCurPointX)) - 1;
else
nCurPointX = nCurPointX + nHitCount;
}
// 重新设置坐标
m_pGameView->SetSelectXPoint((int16)nCurPointX);
m_pGameView->SetSelectMoveSta(true);
}
else
{
int nMenuIndex = m_pGameView->GetMenuIndex(m_pGameView->GetCurMenu());
if (m_pGameView->GetCurMenu() != EMENU_RETURN_MENU)
{
if (nHitCount >= (ALL_GAME_MENU_COUNT - nMenuIndex))
{
m_pGameView->SetCurMenu(EMENU_RETURN_MENU);
}
else
{
GAMEMENU eMenu = m_pGameView->GetMenuFromIndex(nMenuIndex + nHitCount);
m_pGameView->SetCurMenu(eMenu);
}
}
}
pControl->ReleaseKeyPress(EKEY_DOWN, nHitCount);
}
nHitCount = m_pKeyControl->GetKeyHitCounts(EKEY_LEFT);
if (nHitCount != AVLID_KEY_PRESS_NUM)
{
if (nCurPointY == 0)// 已经到最左边
nCurPointY = 9 - nHitCount % 9;
else
{
if (nHitCount > nCurPointY)
nCurPointY = 9 - (nHitCount - nCurPointY) % 9;
else
nCurPointY = nCurPointY - nHitCount;
}
// 重新设置坐标
m_pGameView->SetSelectYPoint((int16)nCurPointY);
m_pGameView->SetSelectMoveSta(true);
pControl->ReleaseKeyPress(EKEY_LEFT, nHitCount);
m_pGameView->SetSelectMoveSta(true);
}
nHitCount = m_pKeyControl->GetKeyHitCounts(EKEY_RIGHT);
if (nHitCount != AVLID_KEY_PRESS_NUM)
{
if (nCurPointY == 9)// 已经到最右边
nCurPointY = nHitCount % 9 - 1;
else
{
if (nHitCount > 8 - nCurPointY)
nCurPointY = (nHitCount - (8 - nCurPointY)) - 1;
else
nCurPointY = nCurPointY + nHitCount;
}
// 重新设置坐标
m_pGameView->SetSelectYPoint((int16)nCurPointY);
m_pGameView->SetSelectMoveSta(true);
pControl->ReleaseKeyPress(EKEY_RIGHT, nHitCount);
m_pGameView->SetSelectMoveSta(true);
}
// 判断选择键
nHitCount = pControl->GetKeyHitCounts(EKEY_SELECT);
if (nHitCount != AVLID_KEY_PRESS_NUM)
{
if (!m_pGameView->GetPauseStatus())// 不是暂停
{
// 按下选择键,判断周围钻石是否可爆炸
HandleSelectDiamond();
}
else
{
if (m_pGameView->GetCurMenu() == EMENU_RETURN_GAME)
{
m_pGameView->SetPauseStatus(!m_pGameView->GetPauseStatus());
// 将键盘按键全部清空
GetKeyControl()->InitData();
}
else if (m_pGameView->GetCurMenu() == EMENU_RETURN_MENU)
{
m_pGameView->ExitView(ID_VIEW_MENU);
}
else if (m_pGameView->GetCurMenu() == EMENU_SOUND_OPEN)
{
m_pApp->SetSoundCfgData(true);
m_pGameView->WtriteSoundCfg(true);
// 打开声音
m_pGameView->SetSoundStatus(OTHER_STATUS);
// m_pGameView->OpenGameSound();
m_pGameView->SetCurMenu(EMENU_SOUND_CLOSE);
m_pGameView->SetCurMenu(EMENU_RETURN_GAME);
m_pGameView->SetPauseStatus(!m_pGameView->GetPauseStatus());
}
else if (m_pGameView->GetCurMenu() == EMENU_SOUND_CLOSE)
{
m_pApp->SetSoundCfgData(false);
m_pGameView->WtriteSoundCfg(false);
// 释放声音
// m_pGameView->CloseGameSound();
m_pGameView->SetCurMenu(EMENU_SOUND_OPEN);
m_pGameView->SetCurMenu(EMENU_RETURN_GAME);
m_pGameView->SetPauseStatus(!m_pGameView->GetPauseStatus());
}
}
pControl->ReleaseKeyPress(EKEY_SELECT, nHitCount);
}
// 右软键按下,停止计时器,进入游戏菜单
// nHitCount = pControl->GetKeyHitCounts(EKEY_RIGHTSOFT);
// 暂时换左软键
nHitCount = pControl->GetKeyHitCounts(EKEY_LEFTSOFT);
if (nHitCount != AVLID_KEY_PRESS_NUM)
{
m_pGameView->SetPauseStatus(!m_pGameView->GetPauseStatus());
pControl->ReleaseKeyPress(EKEY_RIGHTSOFT, nHitCount);
// 将键盘按键全部清空
GetKeyControl()->InitData();
}
}
else
{
if (m_pKeyControl->IsAnyKeyPress())
{
m_pGameView->ExitView(ID_VIEW_MENU);
}
}
}
boolean CPPGameDoc::AddNewDiamond()
{
// 如果到了300ms,就取一颗新钻石,放入底层
if (m_pGameView->GetTimeCount() == 8)
{
if (m_pGameView->m_nCurCol < 9)
{
int k = m_pGameView->GetDiamondType();
m_pGameView->m_nNewLine[m_pGameView->m_nCurCol][0] = k; //将钻石类形存入数组
switch (k)
{
case 1:
case 2:
case 3:
case 4:
m_pGameView->m_nNewLine[m_pGameView->m_nCurCol][1] = k - 1;
break;
case 5:
m_pGameView->m_nNewLine[m_pGameView->m_nCurCol][1] = 4;
break;
case 6:
m_pGameView->m_nNewLine[m_pGameView->m_nCurCol][1] = 7;
break;
case 7:
m_pGameView->m_nNewLine[m_pGameView->m_nCurCol][1] = 10;
break;
case 8:
m_pGameView->m_nNewLine[m_pGameView->m_nCurCol][1] = 13;
break;
case 9:
m_pGameView->m_nNewLine[m_pGameView->m_nCurCol][1] = 16;
break;
}
m_pGameView->m_nCurCol++;
}
else
{
int i = 0;
int j = 0;
// 如果最上层没有数据且最上层数据是爆炸状态,将底层的向游戏层移一层,否则结束游戏
for (j = 0; j < 9; j++)
{
if (m_pGameView->m_nDiamond[0][j][0] != 0
&& m_pGameView->m_nDiamond[0][j][0] != 10)
{
m_pGameView->ExitView(ID_VIEW_STOP);
return false;
}
}
for (i = 1; i < DIAMOND_ROW; i++)
{
for (j = 0; j < DIAMOND_COL; j++)
{
m_pGameView->m_nDiamond[i-1][j][0] = m_pGameView->m_nDiamond[i][j][0];
m_pGameView->m_nDiamond[i-1][j][1] = m_pGameView->m_nDiamond[i][j][1];
m_pGameView->m_nDiamond[i-1][j][2] = m_pGameView->m_nDiamond[i][j][2];
if (i == 9)
{
m_pGameView->m_nDiamond[9][j][0] = m_pGameView->m_nNewLine[j][0];
m_pGameView->m_nDiamond[9][j][1] = m_pGameView->m_nNewLine[j][1];
m_pGameView->m_nDiamond[9][j][2] = m_pGameView->m_nNewLine[j][2];
m_pGameView->m_nNewLine[j][0] = 0;
m_pGameView->m_nNewLine[j][1] = -1;
m_pGameView->m_nNewLine[j][2] = 0;
}
}
}
m_pGameView->m_nCurCol = 0;
m_pGameView->SetDiamondLine();
m_pGameView->SetAllRedrawStatus(true);
}
}
return true;
}
void CPPGameDoc::HandleSelectDiamond()
{
int nRow = m_pGameView->GetSelectXPoint();
int nCol = m_pGameView->GetSelectYPoint();
m_nDiamondCount = 0;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -