public Square[,] PlayerInput(Square[,] board) { Console.WriteLine("Player O's turn"); _scores = new Dictionary <int[], int>(); Board moveBoard = CloneBoard(board); var moves = GameplayHelper.ListEmptySquares(moveBoard.Squares); foreach (var move in moves) { _scores.Add(move, 0); Maximise(moveBoard.Squares, move, this.SquareOccupied, 0); } var optimalMove = _scores.OrderByDescending(score => score.Value).First(); board[optimalMove.Key[0], optimalMove.Key[1]].State = this.SquareOccupied; board[optimalMove.Key[0], optimalMove.Key[1]].DisplayCharacter = this.DisplayCharacter; return(board); }
public Square[,] PlayerInput(Square[,] board) { Console.WriteLine("Player O's turn"); var availableMoves = GameplayHelper.ListEmptySquares(board); var computerWin = GameplayHelper.CheckForWinningSquare(board, availableMoves, SquareState.O); if (computerWin != null) { board[computerWin[0], computerWin[1]].State = this.SquareOccupied; board[computerWin[0], computerWin[1]].DisplayCharacter = this.DisplayCharacter; return(board); } var humanWin = GameplayHelper.CheckForWinningSquare(board, availableMoves, SquareState.X); if (humanWin != null) { board[humanWin[0], humanWin[1]].State = this.SquareOccupied; board[humanWin[0], humanWin[1]].DisplayCharacter = this.DisplayCharacter; return(board); } var random = new Random(); bool turnComplete = false; while (!turnComplete) { var xCoord = random.Next(board.GetLength(0)); var yCoord = random.Next(board.GetLength(1)); if (board[xCoord, yCoord].State.Equals(SquareState.Empty)) { board[xCoord, yCoord].State = this.SquareOccupied; board[xCoord, yCoord].DisplayCharacter = this.DisplayCharacter; turnComplete = true; } } return(board); }