Untitled

 avatar
unknown
plain_text
2 years ago
5.1 kB
2
Indexable
using System;
using System.Windows.Forms;

namespace Piskvorky_JanNeuC3a
{

    class Board
    {
        public readonly Int32 WIDTH = 3;
        public readonly Int32 HEIGHT = 3;

        private ElementType[,] _boardElements;
        public ElementType this[int x, int y]
        {
            get => _boardElements[x, y];
            set
            {
                _boardElements[x, y] = value;
            }
        }


        public Int32[,] WinningIndexes { get; private set; }

        public event EventHandler BoardChanged;

        public Board()
        {
            _boardElements = new ElementType[WIDTH, HEIGHT];
            WinningIndexes = new Int32[WIDTH, 2];
        }


        public void UpdateBoardUI()
        {
            BoardChanged?.Invoke(this, null);
        }


        public bool IsWin(ElementType elementType)
        {
            if ((this[0, 0] == elementType && this[0, 1] == elementType && this[0, 2] == elementType))
            {
                WinningIndexes[0, 0] = 0; WinningIndexes[0, 1] = 0;
                WinningIndexes[1, 0] = 0; WinningIndexes[1, 1] = 1;
                WinningIndexes[2, 0] = 0; WinningIndexes[2, 1] = 2;
                return true;
            }

            if ((this[0, 0] == elementType && this[1, 0] == elementType && this[2, 0] == elementType))
            {
                WinningIndexes[0, 0] = 0; WinningIndexes[0, 1] = 0;
                WinningIndexes[1, 0] = 1; WinningIndexes[1, 1] = 0;
                WinningIndexes[2, 0] = 2; WinningIndexes[2, 1] = 0;
                return true;
            }
            if ((this[0, 0] == elementType && this[1, 1] == elementType && this[2, 2] == elementType))
            {
                WinningIndexes[0, 0] = 0; WinningIndexes[0, 1] = 0;
                WinningIndexes[1, 0] = 1; WinningIndexes[1, 1] = 1;
                WinningIndexes[2, 0] = 2; WinningIndexes[2, 1] = 2;
                return true;
            }
            if ((this[0, 1] == elementType && this[1, 1] == elementType && this[2, 1] == elementType))
            {
                WinningIndexes[0, 0] = 0; WinningIndexes[0, 1] = 1;
                WinningIndexes[1, 0] = 1; WinningIndexes[1, 1] = 1;
                WinningIndexes[2, 0] = 2; WinningIndexes[2, 1] = 1;
                return true;
            }
            if ((this[0, 2] == elementType && this[1, 2] == elementType && this[2, 2] == elementType))
            {
                WinningIndexes[0, 0] = 0; WinningIndexes[0, 1] = 2;
                WinningIndexes[1, 0] = 1; WinningIndexes[1, 1] = 2;
                WinningIndexes[2, 0] = 2; WinningIndexes[2, 1] = 2;
                return true;
            }
            if ((this[0, 2] == elementType && this[1, 1] == elementType && this[2, 0] == elementType))
            {
                WinningIndexes[0, 0] = 0; WinningIndexes[0, 1] = 2;
                WinningIndexes[1, 0] = 1; WinningIndexes[1, 1] = 1;
                WinningIndexes[2, 0] = 2; WinningIndexes[2, 1] = 0;
                return true;
            }
            if ((this[1, 0] == elementType && this[1, 1] == elementType && this[1, 2] == elementType))
            {
                WinningIndexes[0, 0] = 1; WinningIndexes[0, 1] = 0;
                WinningIndexes[1, 0] = 1; WinningIndexes[1, 1] = 1;
                WinningIndexes[2, 0] = 1; WinningIndexes[2, 1] = 2;
                return true;
            }
            if ((this[2, 0] == elementType && this[2, 1] == elementType && this[2, 2] == elementType))
            {
                WinningIndexes[0, 0] = 2; WinningIndexes[0, 1] = 0;
                WinningIndexes[1, 0] = 2; WinningIndexes[1, 1] = 1;
                WinningIndexes[2, 0] = 2; WinningIndexes[2, 1] = 2;
                return true;
            }

            return false;
        }


        public bool IsMovesLeft()
        {
            for (int i = 0; i < WIDTH; i++)
                for (int j = 0; j < HEIGHT; j++)
                    if (this[i, j] == ElementType.Empty)
                        return true;
            return false;
        }


        public void Update(Button[,] buttons)
        {
            for (int i = 0; i < WIDTH; i++)
            {
                for (int j = 0; j < HEIGHT; j++)
                {
                    var button = buttons[i, j];
                    switch (button.Text)
                    {
                        case "X": this[i, j] = ElementType.X; break;
                        case "O": this[i, j] = ElementType.O; break;
                        default: break;
                    }
                }
            }
        }


        public void Clean()
        {
            for (int i = 0; i < WIDTH; i++)
            {
                for (int j = 0; j < HEIGHT; j++)
                {
                    this[i, j] = ElementType.Empty;
                }
            }
        }

        public enum ElementType { Empty, X, O };
    }
}
Editor is loading...