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"); } }
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(); }