Exemple #1
0
        private void DrawMove(Graphics g, Move move, PlayerGlyph glyph, Color color)
        {
            int x = PreferedBorder + PreferedGrid * move.X;
            int y = PreferedBorder + PreferedGrid * move.Y;

            Pen pen = new Pen(color);

            switch (glyph)
            {
            case PlayerGlyph.X:
                g.DrawLine(pen, new Point(x + PreferedSpacer, y + PreferedSpacer),
                           new Point(x + PreferedGrid - PreferedSpacer, y + PreferedGrid - PreferedSpacer));
                g.DrawLine(pen, new Point(x + PreferedGrid - PreferedSpacer, y + PreferedSpacer),
                           new Point(x + PreferedSpacer, y + PreferedGrid - PreferedSpacer));
                break;

            case PlayerGlyph.O:
                g.DrawEllipse(pen, x + PreferedSpacer, y + PreferedSpacer, PreferedGrid - 2 * PreferedSpacer, PreferedGrid - 2 * PreferedSpacer);
                break;

            default:
                throw new Exception("unknown player");
            }
        }
Exemple #2
0
        private void HandleClick(MouseEventArgs e)
        {
            if (e.Button != MouseButtons.Left)
            {
                return;
            }

            if (Game == null || Game.GameOver || PlayerSettings.GetPlayerController(Game.CurrentPlayer) == PlayerController.Computer)
            {
                return;
            }

            var clickedMove = new Move(-1, -1);

            int x = PreferedBorder;

            for (int i = 0; i < Game.Width; ++i, x += PreferedGrid)
            {
                if (e.X > x && e.X < (x + PreferedGrid))
                {
                    clickedMove.X = i;
                    break;
                }
            }

            int y = PreferedBorder;

            for (int i = 0; i < Game.Height; ++i, y += PreferedGrid)
            {
                if (e.Y > y && e.Y < (y + PreferedGrid))
                {
                    clickedMove.Y = i;
                    break;
                }
            }

            if (clickedMove.X >= 0 && clickedMove.Y >= 0)
            {
                if (Game.GetMove(clickedMove) != Player.Invalid)
                {
                    clickedMove = new Move(-1, -1);
                }
            }

            if (clickedMove.X >= 0 && clickedMove.Y >= 0)
            {
                if ((selectedMove != null && clickedMove == selectedMove) || e.Clicks > 1)
                {
                    Game.RecordMove(clickedMove);
                    selectedMove = null;
                }
                else
                {
                    selectedMove = clickedMove;
                }
            }
            else
            {
                selectedMove = null;
            }

            Parent.Refresh();

            RunComputerPlayers();
        }