📄 onlbuttonup(uint nflags, cpoint point).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 + -