Создать игру "Перебрось Мостик" - C#

Узнай цену своей работы

Формулировка задачи:

⦁ Мостики В ходе игры каждый из игроков старается построить мост с одного своего берега на другой (здесь берегами являются противоположные стороны квадратного поля). У Красного — красные берега и крестики в качестве камней, у Синего — синие берега и нолики. Игру можно начинать в любой точке поля. За один ход игрок может соединить два своих соседних камня вертикальным или горизонтальным мостиком. Красные и синие мосты пересекаться не должны. Выигрывает тот, кто построит непрерывный мост с одного своего берега на другой. Реализовать режим для двоих игроков на горячем стуле.

Решение задачи: «Создать игру "Перебрось Мостик"»

textual
Листинг программы
    class GamePanel : UserControl
    {
        private Game game;
 
        public GamePanel()
        {
            SetStyle(ControlStyles.AllPaintingInWmPaint  | ControlStyles.OptimizedDoubleBuffer | ControlStyles.UserPaint | ControlStyles.ResizeRedraw, true);
        }
 
        public void Build(Game game)
        {
            this.game = game;
            Invalidate();
        }
 
        protected override void OnPaint(PaintEventArgs e)
        {
            if (game == null)
                return;
 
            e.Graphics.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
 
            for(int x = 0; x < Game.BOARD_SIZE;x++)
            for(int y = 0; y < Game.BOARD_SIZE;y++)
            if (game[x, y] == Cell.Blue || game[x, y] == Cell.Red)
            {
                DrawPoint(e, x, y, game[x, y] == Cell.Blue ? Color.Blue : Color.Red, (game[x, y] == Cell.Blue) ^ (y % 2 == 0));
            }
 
            if (hovered != null)
            {
                var x = hovered.Value.X;
                var y = hovered.Value.Y;
                DrawPoint(e, x, y, game.CurrentPlayer == Cell.Blue ? Color.LightBlue : Color.Coral, (game.CurrentPlayer == Cell.Blue) ^ (y%2 == 0));
            }
        }
 
        private void DrawPoint(PaintEventArgs e, int x, int y, Color color, bool vertical)
        {
            using (var brush = new SolidBrush(color))
            using (var pen = new Pen(color, 2))
            {
                var pp = ToScreen(new Point(x, y));
 
                if ((x + y)%2 == 1)
                    e.Graphics.FillEllipse(brush, pp.X - 3, pp.Y - 3, 6, 6);
                else
                {
                    if (vertical)
                        e.Graphics.DrawLine(pen, pp.X, pp.Y - step, pp.X, pp.Y + step);
                    else
                        e.Graphics.DrawLine(pen, pp.X - step, pp.Y, pp.X + step, pp.Y);
                }
            }
        }
 
        private Point? hovered;
 
        protected override void OnMouseMove(MouseEventArgs e)
        {
            if (game.Winner != Cell.Empty) return;
 
            var p = ToClient(e.Location);
            if (game[p.X, p.Y] == Cell.Empty)
                hovered = p;
            else
                hovered = null;
 
            Invalidate();
        }
 
        protected override void OnMouseDown(MouseEventArgs e)
        {
            if (hovered != null)
            {
                game.Move(hovered.Value.X, hovered.Value.Y);
                hovered = null;
            }
            Invalidate();
        }
 
        private int padding = 5;
 
        private int step
        {
            get { return Math.Min((ClientSize.Width - padding*2)/(Game.BOARD_SIZE - 1), (ClientSize.Height - padding * 2) / (Game.BOARD_SIZE - 1)); }
        }
        
        Point ToClient(Point p)
        {
            return new Point((int)Math.Round(1f * (p.X - padding) / step), (int)Math.Round(1f * (p.Y - padding) / step));
        }
 
        Point ToScreen(Point p)
        {
            return new Point(p.X * step + padding, p.Y * step + padding);
        }
    }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

11   голосов , оценка 4.545 из 5
Похожие ответы