Untitled

 avatar
unknown
plain_text
2 years ago
3.6 kB
0
Indexable
using System;
using System.Collections.Generic;

namespace TicTacToe
{
    public class Game
    {
        public enum SquareState { Empty, X, O }
        private SquareState[,] board;
        private GameMode gameMode;

        public Game()
        {
            board = new SquareState[3, 3];
            ResetBoard();
        }

        public GameMode GetGameMode()
        {
            return gameMode;
        }
        public void SetGameMode(GameMode gameMode)
        {
            this.gameMode = gameMode;
        }

        public void ResetBoard()
        {
            for (int i = 0; i < 3; i++)
            {
                for (int j = 0; j < 3; j++)
                {
                    board[i, j] = SquareState.Empty;
                }
            }
        }

         public bool MakeMove(int x, int y, SquareState state)
         {
             if (board[x, y] == SquareState.Empty)
             {
                 board[x, y] = state;
                 return true;
             }
             else
             {
                 return false;
             }
         }

        public bool MakeMove(string move, SquareState state)
        {
            string[] parts = move.Split(',');
            int x = int.Parse(parts[0]);
            int y = int.Parse(parts[1]);
            return MakeMove(x, y, state);
        }


        public SquareState GetState(int x, int y)
        {
            return board[x, y];
        }

        public bool IsBoardFull()
        {
            for (int i = 0; i < 3; i++)
            {
                for (int j = 0; j < 3; j++)
                {
                    if (board[i, j] == SquareState.Empty)
                    {
                        return false;
                    }
                }
            }
            return true;
        }

        public bool IsGameOver()
        {
            return IsBoardFull() || CheckForWinner();
        }


        public bool CheckForWinner()
        {
            // horizontal checks
            for (int i = 0; i < 3; i++)
            {
                if (board[i, 0] != SquareState.Empty && board[i, 0] == board[i, 1] && board[i, 0] == board[i, 2])
                {
                    return true;
                }
            }
            // vertical checks
            for (int i = 0; i < 3; i++)
            {
                if (board[0, i] != SquareState.Empty && board[0, i] == board[1, i] && board[0, i] == board[2, i])
                {
                    return true;
                }
            }
            // diagonal checks
            if (board[0, 0] != SquareState.Empty && board[0, 0] == board[1, 1] && board[0, 0] == board[2, 2])
            {
                return true;
            }
            if (board[0, 2] != SquareState.Empty && board[0, 2] == board[1, 1] && board[0, 2] == board[2, 0])
            {
                return true;
            }
            return false;
        }

        public List<(int, int)> GetAvailableMoves()
        {
            List<(int, int)> availableMoves = new List<(int, int)>();
            for (int i = 0; i < 3; i++)
            {
                for (int j = 0; j < 3; j++)
                {
                    if (board[i, j] == SquareState.Empty)
                    {
                        availableMoves.Add((i, j));
                    }
                }
            }
            return availableMoves;
        }
    }
}
Editor is loading...