public override byte[] MakeMove(OthelloGame game, BoardStates player) { byte[] bestMove = new byte[] { byte.MaxValue, byte.MaxValue }; List <byte[]> moves = game.GetPossiblePlayList(); double bestScore = int.MinValue + 1; if (game.GetPieceCount(BoardStates.empty) > 58)//first two moves, don't compute { return(OpeningMove(player, game)); } else if (moves.Count == 1) //don't compute if there is only 1 move { return(moves[0]); } foreach (byte[] move in moves) { OthelloGame testGame = game.DeepCopy(); testGame.MakeMove(move); double thisScore = EvaluateBoard(testGame, player); if (thisScore > bestScore) { bestScore = thisScore; bestMove = move; } } if ((bestMove[0] == byte.MaxValue || bestMove[1] == byte.MaxValue) && moves.Count > 0) {//All moves are valued at -inf, return one of em return(moves[0]); } return(bestMove); }
public override byte[] MakeMove(OthelloGame game, BoardStates player) { List <byte[]> moves = game.GetPossiblePlayList(player); double bestScore = double.MinValue; byte[] bestMove = new byte[] { byte.MaxValue, byte.MaxValue }; foreach (byte[] move in moves) { OthelloGame testGame = game.DeepCopy(); testGame.MakeMove(move); double thisScore = EvaluateBoard(testGame, player); if (thisScore > bestScore) { bestScore = thisScore; bestMove = move; } } return(bestMove); }