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