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

📄 ppgamedoc.cpp

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