Ejemplo n.º 1
0
        private Player?PlayGame()
        {
            Board board = new Board();

            Player currentPlayer = Player.X;

            void SwichPlayer()
            {
                currentPlayer = currentPlayer == Player.X ? Player.O : Player.X;
            }

            bool PlayBoard(int row, int column)
            {
                var cell = board.GetCell(row, column);

                if (cell == CellStatus.HasO || cell == CellStatus.HasX)
                {
                    return(false);
                }

                if (currentPlayer == Player.O)
                {
                    board.SetCell(row, column, CellStatus.HasO);
                }
                else
                {
                    board.SetCell(row, column, CellStatus.HasX);
                }

                board.PrintToConsole(writeToConsole);

                return(true);
            }

            void PlayOneTurn()
            {
                while (true)
                {
                    var(row, column) = ReadRowAndColumnFromConsole();

                    if (!PlayBoard(row, column))
                    {
                        writeToConsole("Cell is not empty");
                    }
                    else
                    {
                        break;
                    }
                }
            }

            while (!board.Winner.HasValue && !board.IsFull())
            {
                writeToConsole("It's player " + currentPlayer + "'s turn");

                PlayOneTurn();

                SwichPlayer();
            }

            if (board.Winner.HasValue)
            {
                writeToConsole(board.Winner + " is a winner");
            }
            else
            {
                writeToConsole("Game over. No winner");
            }

            return(board.Winner);
        }