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

📄 ppgameview.cpp

📁 一个点泡泡游戏
💻 CPP
📖 第 1 页 / 共 3 页
字号:
	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 + -