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

📄 onlbuttonup(uint nflags, cpoint point).txt

📁 用VC++设计与实现扫雷系统
💻 TXT
字号:
void CMineWnd::OnLButtonUp(UINT nFlags, CPoint point)
{
	//获取笑脸图按钮所在的区域
	CRect rcBtn(m_uBtnRect[1], 15, m_uBtnRect[2], 39);
	//雷区所在的区域
	CRect rcMineArea(MINE_AREA_LEFT, MINE_AREA_TOP,
		MINE_AREA_LEFT + m_uXNum * MINE_WIDTH,
		MINE_AREA_TOP + m_uYNum * MINE_HEIGHT);

	//接口函数PtInRect()判断当前鼠标的位置是否在区域内
	if (rcBtn.PtInRect(point))
	{
		//点击笑脸图
		Invalidate();	//初始化函数
		InitGame();		//重新开始游戏  
	}
	else if (rcMineArea.PtInRect(point))
	{
		//点击雷区域
		CString value;
		UINT around =0;

		//根据不同的游戏状态作处理
		switch(m_uGameState)
		{
			//游戏进行状态
		case GS_WAIT:  
		case GS_RUN:
			m_pOldMine = GetMine(point.x, point.y);
			if (!m_pOldMine)
			{
				ReleaseCapture();
				return;
			}
			//判断当前状态是否为左右鼠标同时按下
			if (m_bLRBtnDown)
			{
				//有问题
				m_bLRBtnDown = TRUE;
				OnLRBtnDown(m_pNewMine->uRow , m_pNewMine->uCol);
			}
			else
			{
				//1.如果游戏尚未开始,点击左键启动游戏
				if (m_uGameState == GS_WAIT)
				{
					if(m_uTimer)
					{
						KillTimer(ID_TIMER_EVENT);
						m_uTimer = 0;
					}
					m_uSpendTime = 1;
					Invalidate();
					
					//启动定时器
					m_uTimer = SetTimer(ID_TIMER_EVENT, 1000, NULL);
					//布雷
					LayMines(m_pOldMine->uRow, m_pOldMine->uCol);
					//改变游戏状态为运行"/GS_RUN"
					m_uGameState = GS_RUN;
				}

				if(m_pOldMine->uOldState == STATE_NORMAL)
				{
					//当该雷区域为正常、未作标记才打开

					//2.1如果该区域为雷,则死亡
					if(IsMine(m_pOldMine->uRow, m_pOldMine->uCol))
					{
						Dead(m_pOldMine->uRow, m_pOldMine->uCol);
						ReleaseCapture();
						return;
					}
					//2.2不是雷的时候,获取其周围的雷数目
					around = GetAroundNum(m_pOldMine->uRow, m_pOldMine->uCol);
					//2.3如果为空白区域,拓展,否则打开该区域(显示周围有多少雷数)
					if  (around == 0)
						ExpandMines(m_pOldMine->uRow,m_pOldMine->uCol);
					else
						DrawDownNum(m_pOldMine,around);
					//2.4判断是否为胜利
					if(Victory())
					{
						Invalidate();
						ReleaseCapture();
						return;
					}
				}
				break;


			case GS_VICTORY:
			case GS_DEAD:
				ReleaseCapture();//释放鼠标捕捉
				return;
			default:
				break;

			}		

			m_uBtnState = BUTTON_NORMAL;
			Invalidate();
		}
		else
		{
			//点击非雷区域
			if(m_uGameState == GS_WAIT || m_uGameState == GS_RUN )
			{
				m_uBtnState = BUTTON_NORMAL;
				InvalidateRect(rcBtn);
			}
		}
	}
	ReleaseCapture();
	CWnd::OnLButtonUp(nFlags, point);

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -