private void Blocks_MouseDown(object sender, MouseEventArgs e) { // 获得图片框对象。 PictureBox block = sender as PictureBox; // 获取方块在雷区中的位置。 Position position = block.Tag as Position; // 检测按键。 StaticData.MyMouseButtons buttons = StaticData.MyMouseButtons.None; if (e.Button == MouseButtons.Left) { // 按下的左键。 isLeftDown = true; buttons = StaticData.MyMouseButtons.Left; } else if (e.Button == MouseButtons.Right) { // 按下的右键。 isRightDown = true; buttons = StaticData.MyMouseButtons.Right; } // 检测是否同时按下。 if (isLeftDown && isRightDown) { buttons = StaticData.MyMouseButtons.Both; } // 调用游戏控制中的事件处理程序。 controller.ProcessMouseDown(position.RowId, position.ColId, buttons); }
public void ProcessMouseDown(int rowId, int colId, StaticData.MyMouseButtons buttons) { // 游戏结束,不响应事件。 if (isGameEnd) { return; } // 获取响应方块信息 BlockInfo bi = GetCurrentInfo(rowId, colId); switch (buttons) { case StaticData.MyMouseButtons.Left: switch (bi.CurrentState) { case BlockInfo.BlockStates.Flagged: view.SetBlockImage(rowId, colId, Resources.FlaggedImage); break; case BlockInfo.BlockStates.Normal: view.SetBlockImage(rowId, colId, Resources.NormalMouseDownImage); break; case BlockInfo.BlockStates.Questioned: view.SetBlockImage(rowId, colId, Resources.QuestionedMouseDownImage); break; } break; case StaticData.MyMouseButtons.Right: // 在普通,标记,问号三个状态间顺序切换。 switch (bi.CurrentState) { case BlockInfo.BlockStates.Normal: bi.CurrentState = BlockInfo.BlockStates.Flagged; view.SetBlockImage(rowId, colId, Resources.FlaggedImage); remainCount--; break; case BlockInfo.BlockStates.Flagged: bi.CurrentState = BlockInfo.BlockStates.Questioned; view.SetBlockImage(rowId, colId, Resources.QuestionedImage); remainCount++; break; case BlockInfo.BlockStates.Questioned: bi.CurrentState = BlockInfo.BlockStates.Normal; view.SetBlockImage(rowId, colId, Resources.NormalImage); break; } view.UpdateRemainMinesDisplay(remainCount); break; case StaticData.MyMouseButtons.Both: TryDigAround(rowId, colId); break; } }
public void ProcessMouseUp(int rowId, int colId, StaticData.MyMouseButtons buttons) { // 游戏结束,不响应事件。 if (isGameEnd) { return; } // 获取响应方块信息 BlockInfo bi = GetCurrentInfo(rowId, colId); try { switch (buttons) { case StaticData.MyMouseButtons.Left: case StaticData.MyMouseButtons.Right: switch (bi.CurrentState) { case BlockInfo.BlockStates.Digged: return; case BlockInfo.BlockStates.Flagged: view.SetBlockImage(rowId, colId, Resources.FlaggedHighlightImage); break; case BlockInfo.BlockStates.Normal: case BlockInfo.BlockStates.Questioned: // 点开这个方块。 if (buttons == StaticData.MyMouseButtons.Left) { DigIt(rowId, colId); } break; } break; case StaticData.MyMouseButtons.Both: // 尝试挖开周围方块。 DigAround(rowId, colId); break; } } catch (GameEndException) { // 已捕捉到游戏结束异常。 NewGame(); } }
private void Blocks_MouseUp(object sender, MouseEventArgs e) { // 获得图片框对象。 PictureBox block = sender as PictureBox; // 获取方块在雷区中的位置。 Position position = block.Tag as Position; // 检测按键释放。 StaticData.MyMouseButtons buttons = StaticData.MyMouseButtons.None; if (isLeftDown && isRightDown) { // 刚刚的状态是双键同时按下。 buttons = StaticData.MyMouseButtons.Both; // 必须释放相应键。 if (e.Button == MouseButtons.Left) { isLeftDown = false; } else if (e.Button == MouseButtons.Right) { isRightDown = false; } } else { if (e.Button == MouseButtons.Left) { // 释放的是左键。 isLeftDown = false; buttons = StaticData.MyMouseButtons.Left; } else if (e.Button == MouseButtons.Right) { // 释放的是右键。 isRightDown = false; buttons = StaticData.MyMouseButtons.Right; } } // 调用游戏控制中的事件处理程序。 controller.ProcessMouseUp(position.RowId, position.ColId, buttons); }