Пример #1
0
        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);
        }
Пример #2
0
        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;
            }
        }
Пример #3
0
        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();
            }
        }
Пример #4
0
        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);
        }