📄 ppgameview.cpp
字号:
switch(nX)
{
case 7:
nRow = 0;
break;
case 17:
nRow = 1;
break;
case 27:
nRow = 2;
break;
case 37:
nRow = 3;
break;
case 47:
nRow = 4;
break;
case 57:
nRow = 5;
break;
case 67:
nRow = 6;
break;
case 77:
nRow = 7;
break;
case 87:
nRow = 8;
break;
case 97:
nRow = 9;
break;
default:
nRow = 0;
break;
}
return nRow;
}
int CPPGameView::GetSelectColFromY(int nY)
{
int nCol = 0;
switch(nY)
{
case 2:
nCol = 0;
break;
case 12:
nCol = 1;
break;
case 22:
nCol = 2;
break;
case 32:
nCol = 3;
break;
case 42:
nCol = 4;
break;
case 52:
nCol = 5;
break;
case 62:
nCol = 6;
break;
case 72:
nCol = 7;
break;
case 82:
nCol = 8;
break;
case 92:
nCol = 9;
break;
default:
nCol = 0;
break;
}
return nCol;
}
boolean CPPGameView::GetPauseStatus()
{
return m_bPause;
}
void CPPGameView::SetPauseStatus(boolean bPause)
{
m_bPause = bPause;
}
void CPPGameView::DrawGameMenu()
{
// 菜单背景
m_pGameMenuBitmap[IDB_GAMEMENUBACK_INDEX]->Draw(true, 3, 24, 0, 0);
m_pGameMenuBitmap[IDB_GAMEMENUBACK_INDEX]->Draw(true, 3, 53, 0, 0);
m_pGameMenuBitmap[IDB_GAMEMENUBACK_INDEX]->Draw(true, 3, 82, 0, 0);
DrawMenu(EMENU_RETURN_GAME);
if (!((CPPGameApp*) GETAPPINSTANCE())->GetSoundCfg())// 打开声音
{
DrawMenu(EMENU_SOUND_OPEN);
}
else
{
DrawMenu(EMENU_SOUND_CLOSE);
}
DrawMenu(EMENU_RETURN_MENU);
}
boolean CPPGameView::LoadGameMenuBmpRes()
{
BEGIN_CHECK
{
// 加载位图资源
CHECK_ERROR(m_pGameMenuBitmap[IDB_GAMEMENUTEXT_INDEX]->Load(IDB_GAMEMENUTEXT));
CHECK_ERROR(m_pGameMenuBitmap[IDB_GAMEMENUBACK_INDEX]->Load(IDB_GAMEMENUBACK));
}
CATCH_CHECK
{
CUSTOM_RELEASE(m_pGameMenuBitmap[IDB_GAMEMENUTEXT_INDEX]);
CUSTOM_RELEASE(m_pGameMenuBitmap[IDB_GAMEMENUBACK_INDEX]);
return false;
}
return true;
}
void CPPGameView::DrawMenu(GAMEMENU eCurMenu)
{
bool bDrawhight = false;// 是否高亮显示
if (m_eCurMenu == eCurMenu)
bDrawhight = true;
int nDrawIndex = 0; // 取菜单位图的对应索引
int nMenuIndex = GetMenuIndex(eCurMenu);// 取得菜单的纵向索引
switch (eCurMenu)
{
case EMENU_RETURN_GAME:
nDrawIndex = bDrawhight ? RETURN_GAME_LIGHT : RETURN_GAME_NORMAL;
break;
case EMENU_SOUND_OPEN:
nDrawIndex = bDrawhight ? SOUND_OPEN_LIGHT : SOUND_OPEN_NORMAL;
break;
case EMENU_SOUND_CLOSE:
nDrawIndex = bDrawhight ? SOUND_CLOSE_LIGHT : SOUND_CLOSE_NORMAL;
break;
case EMENU_RETURN_MENU:
nDrawIndex = bDrawhight ? RETURN_MENU_LIGHT : RETURN_MENU_NORMAL;
break;
default:
break;
}
// 目标坐标横向从19开始,纵向从29开始,位图坐标从(0,0)开始
m_pGameMenuBitmap[IDB_GAMEMENUTEXT_INDEX]->Draw(19, (nMenuIndex - 1)* 29 + 29, m_nMenuWidth, m_nMenuHeight, nDrawIndex * m_nMenuWidth, 0);
}
int CPPGameView::GetMenuIndex(GAMEMENU eCurMenu)
{
int nIndex = 0;
switch (eCurMenu)
{
case EMENU_RETURN_GAME:
nIndex = 1;
break;
case EMENU_SOUND_OPEN:
nIndex = 2;
break;
case EMENU_SOUND_CLOSE:
nIndex = 2;
break;
case EMENU_RETURN_MENU:
nIndex = 3;
break;
default:
nIndex = 1;
break;
}
return nIndex;
}
GAMEMENU CPPGameView::GetCurMenu()
{
return m_eCurMenu;
}
GAMEMENU CPPGameView::GetMenuFromIndex(int nIndex)
{
switch (nIndex)
{
case 1:
return EMENU_RETURN_GAME;
case 2:
{
if (!((CPPGameApp*) GETAPPINSTANCE())->GetSoundCfg())// 打开声音
return EMENU_SOUND_OPEN;
else
return EMENU_SOUND_CLOSE;
}
case 3:
return EMENU_RETURN_MENU;
default:
return EMENU_RETURN_GAME;
}
}
void CPPGameView::SetCurMenu(GAMEMENU eMenu)
{
m_eCurMenu = eMenu;
}
void CPPGameView::WtriteSoundCfg(bool bOpenSound)
{
IFileMgr* pIFileMgr = NULL; // 文件接口
IFile* pIFile; // 文件操作借口
SOUNDCFG tOpenSound;
tOpenSound.bOpenSound = bOpenSound;
CPPGameApp* pApp = (CPPGameApp*) GETAPPINSTANCE();
if (pApp == NULL)
return;
BEGIN_CHECK
{
// 创建文件接口
CHECK_ERROR(ISHELL_CreateInstance(pApp->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_Write(pIFile, &tOpenSound, sizeof(SOUNDCFG));
// 关闭文件
IFILE_Release(pIFile);
}
else
{
pIFile = IFILEMGR_OpenFile(pIFileMgr, SOUND_CFG_FILE, _OFM_CREATE);
if (pIFile == NULL)
{
IRELEASE(pIFileMgr, FILEMGR);
return;
}
IFILE_Write(pIFile, &tOpenSound, sizeof(SOUNDCFG));
// 关闭文件
IFILE_Release(pIFile);
}
IRELEASE(pIFileMgr, FILEMGR);
}
void CPPGameView::FreeResourse()
{
// 设置定时器结束标志
m_pDoc->SetExitTimer(true);
// 结束定时器
CALLBACK_Cancel(&m_cbTimer);
// 释放声音
// if (m_pISoundPlayer1)
// {
// ISOUNDPLAYER_Release(m_pISoundPlayer1);
// m_pISoundPlayer1 = NULL;
// }
// if (m_pISoundPlayer2)
// {
// ISOUNDPLAYER_Release(m_pISoundPlayer2);
// m_pISoundPlayer2 = NULL;
// }
if (m_pIMedia1)
{
IMEDIA_Release(m_pIMedia1);
m_pIMedia1 = NULL;
FREE(m_pSoundBuffer1);
}
if (m_pIMedia2)
{
IMEDIA_Release(m_pIMedia2);
m_pIMedia2 = NULL;
FREE(m_pSoundBuffer2);
}
//释放文件
if (m_pIFileMgr)
{
IFILEMGR_Release(m_pIFileMgr);
m_pIFileMgr = NULL;
}
if (m_pIFile)
{
IFILE_Release(m_pIFile);
m_pIFile = NULL;
}
// 释放位图资源
if (m_pBitmap[IDB_GAMEBACK_INDEX])
CUSTOM_RELEASE(m_pBitmap[IDB_GAMEBACK_INDEX]);
if (m_pBitmap[IDB_DIAMOND_INDEX])
CUSTOM_RELEASE(m_pBitmap[IDB_DIAMOND_INDEX]);
CUSTOM_RELEASE(m_pBitmap[IDB_BROW_INDEX]);
CUSTOM_RELEASE(m_pBitmap[IDB_SELECT_INDEX]);
if (m_pBitmap[IDB_BLAST_INDEX])
CUSTOM_RELEASE(m_pBitmap[IDB_BLAST_INDEX]);
if (m_pBitmap[IDB_DATA_INDEX])
CUSTOM_RELEASE(m_pBitmap[IDB_DATA_INDEX]);
CUSTOM_RELEASE(m_pGameMenuBitmap[IDB_GAMEMENUTEXT_INDEX]);
CUSTOM_RELEASE(m_pGameMenuBitmap[IDB_GAMEMENUBACK_INDEX]);
// 释放资源
for (int i = 0; i < 4; i++)
{
if (m_pbmDbd[i])
{
IBITMAP_Release(m_pbmDbd[i]);
m_pbmDbd[i] = NULL;
}
if (m_pScreen[i])
{
IBITMAP_Release(m_pScreen[i]);
m_pScreen[i] = NULL;
}
}
}
void CPPGameView::OnSuspend()
{
// 结束定时器
CALLBACK_Cancel(&m_cbTimer);
// 释放资源
CPPBaseView::OnSuspend();
}
void CPPGameView::OnResume()
{
CPPBaseView::OnResume();
}
void CPPGameView::OnDrawDemo()
{
int nRow = 0;
int nCol = 0;
// 重画背景图
IBITMAP_BltIn(m_pScreen[0], 0, 0, SCREEN_PROPERTY_WIDTH, SCREEN_PROPERTY_HIGTH, m_pbmDbd[0], 0, 0, AEE_RO_COPY);
// 重绘钻石、选择框
for (nRow = 0; nRow < DIAMOND_ROW; nRow++)
{
for (nCol = 0; nCol < DIAMOND_COL; nCol++)
{
int nPosX = GetXPosFromColDiamond(nCol);
int nPosY = GetYPosFromRowDiamond(nRow);
if (m_nDiamond[nRow][nCol][0] != 0)
{
switch (m_nDiamond[nRow][nCol][0])
{
case 1:
case 2:
case 3:
case 4:
Draw(m_pScreen[1], m_pbmDbd[1], nPosX,
nPosY, 10, 10, m_nDiamond[nRow][nCol][1] * 10, 0);
break;
case 5: // 红炸弹
{
Draw(m_pScreen[1], m_pbmDbd[1], nPosX,
nPosY, 10, 10, m_nDiamond[nRow][nCol][1] * 10, 0);
if (m_nDiamond[nRow][nCol][1] == 6)
m_nDiamond[nRow][nCol][1] = 4;
else
m_nDiamond[nRow][nCol][1]++;
}
break;
case 6: // 黄炸弹
{
Draw(m_pScreen[1], m_pbmDbd[1], nPosX,
nPosY, 10, 10, m_nDiamond[nRow][nCol][1] * 10, 0);
if (m_nDiamond[nRow][nCol][1] == 9)
m_nDiamond[nRow][nCol][1] = 7;
else
m_nDiamond[nRow][nCol][1]++;
}
break;
case 7: // 蓝炸弹
{
Draw(m_pScreen[1], m_pbmDbd[1], nPosX,
nPosY, 10, 10, m_nDiamond[nRow][nCol][1] * 10, 0);
if (m_nDiamond[nRow][nCol][1] == 12)
m_nDiamond[nRow][nCol][1] = 10;
else
m_nDiamond[nRow][nCol][1]++;
}
break;
case 8: // 粉炸弹
{
Draw(m_pScreen[1], m_pbmDbd[1], nPosX,
nPosY, 10, 10, m_nDiamond[nRow][nCol][1] * 10, 0);
if (m_nDiamond[nRow][nCol][1] == 15)
m_nDiamond[nRow][nCol][1] = 13;
else
m_nDiamond[nRow][nCol][1]++;
}
break;
case 9: // 黑炸弹
{
Draw(m_pScreen[1], m_pbmDbd[1], nPosX,
nPosY, 10, 10, m_nDiamond[nRow][nCol][1] * 10, 0);
if (m_nDiamond[nRow][nCol][1] == 18)
m_nDiamond[nRow][nCol][1] = 16;
else
m_nDiamond[nRow][nCol][1]++;
}
break;
case 10: // 爆炸
{
Draw(m_pScreen[2], m_pbmDbd[2], nPosX,
nPosY, 10, 10, m_nDiamond[nRow][nCol][1] * 10, 0);
if (m_nDiamond[nRow][nCol][1] == 3)
{
m_nDiamond[nRow][nCol][0] = 0;
m_nDiamond[nRow][nCol][1] = 0;
}
else
m_nDiamond[nRow][nCol][1]++;
}
break;
default:
break;
}
}
}
}
// 处理选择框索引
if (m_nGameTimeCount % 2 == 0)
{
m_nCurSelectIndex = (m_nCurSelectIndex == 0) ? 1 : 0;
}
// 重绘选择框
m_pBitmap[IDB_SELECT_INDEX]->Draw(m_tSelectPoint.ptNewScreenX, m_tSelectPoint.ptNewScreenY,
14, 14, 14 * m_nCurSelectIndex, 0);
// 画表情
m_pBitmap[IDB_BROW_INDEX]->Draw(100, 95, 25, 24, 25 * m_nBrowIndex, 0);
m_nBrowIndex = 2;
// 画得分
int nScore = m_pDoc->m_tGameScore.nScore;
int nCount = 0;
int nIndex = 0;
while (true)
{
int nTempData = nScore % 10;
nIndex = m_pDoc->GetDataIndex(nTempData);
Draw(m_pScreen[3], m_pbmDbd[3], 118 - nCount * 6 , 125, 6, 12, nIndex, 0);
nScore = nScore / 10;
nCount++;
if (nScore == 0)
break;
}
// 画剩余行数
int nLine = m_nLines[1];
nCount = 0;
nIndex = 0;
while (true)
{
int nTempData = nLine % 10;
nIndex = m_pDoc->GetDataIndex(nTempData);
Draw(m_pScreen[3], m_pbmDbd[3], 115 - nCount * 6 , 72, 6, 12, nIndex, 0);
nLine = nLine / 10;
nCount++;
if (nLine == 0)
break;
}
// 画新增钻石
for (nCol = 0; nCol < m_nCurCol; nCol++)
{
Draw(m_pScreen[1], m_pbmDbd[1], (nCol* 10) + 3, 120, 10, 10, m_nNewLine[nCol][1] * 10, 0);
switch (m_nNewLine[nCol][1])
{
case 4:
case 5:
case 7:
case 8:
case 10:
case 11:
case 13:
case 14:
case 16:
case 17:
m_nNewLine[nCol][1]++;
break;
case 6:
case 9:
case 12:
case 15:
case 18:
m_nNewLine[nCol][1] = m_nNewLine[nCol][1] - 2;
break;
default:
break;
}
}
SetTimeCount();
}
void CPPGameView::CloseGameSound()
{
// if (m_pISoundPlayer1)
// {
// ISOUNDPLAYER_Release(m_pISoundPlayer1);
// m_pISoundPlayer1 = NULL;
// }
}
void CPPGameView::OpenGameSound()
{
// if (!m_pISoundPlayer1)
// {
// // 设置声音
// if (ISHELL_CreateInstance(((CPPGameApp*) GETAPPINSTANCE())->m_pIShell, AEECLSID_SOUNDPLAYER,
// (void**)&m_pISoundPlayer1) != SUCCESS)
// {
// ISOUNDPLAYER_Release(m_pISoundPlayer1);
// m_pISoundPlayer1 = NULL;
// }
// if (ISHELL_CreateInstance(((CPPGameApp*) GETAPPINSTANCE())->m_pIShell, AEECLSID_SOUNDPLAYER,
// (void**)&m_pISoundPlayer2) != SUCCESS)
// {
// ISOUNDPLAYER_Release(m_pISoundPlayer2);
// m_pISoundPlayer2 = NULL;
// }
// }
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -