Пример #1
0
 public double AlphaBeta(TicTacToeBoard oldBoard, double alpha, double beta, int player)
 {
     if (oldBoard.CheckForWin() != 0 || oldBoard.CheckForDraw())
     {
         return Score(oldBoard);
     }
     if (player == 1)
     {
         double val = -10000.0;
         for (int i = 1; i <= 9; i++)
         {
             if (oldBoard.GetMove(i) == 0)
             {
                 TicTacToeBoard newBoard = new TicTacToeBoard(oldBoard);
                 newBoard.MakeMove(i, player);
                 val = Math.Max(val, gamma * AlphaBeta(newBoard, alpha, beta, 2));
                 alpha = Math.Max(alpha, val);
                 if (beta <= alpha) break;
             }
         }
         return alpha;
     }
     else
     {
         double val = 10000.0;
         for (int i = 1; i <= 9; i++)
         {
             if (oldBoard.GetMove(i) == 0)
             {
                 TicTacToeBoard newBoard = new TicTacToeBoard(oldBoard);
                 newBoard.MakeMove(i, player);
                 val = Math.Min(val, gamma * AlphaBeta(newBoard, alpha, beta, 1));
                 beta = Math.Min(val, beta);
                 if (beta <= alpha) break;
             }
         }
         return beta;
     }
 }
Пример #2
0
 public void TakeATurn(TicTacToeBoard board)
 {
     board.DisplayBoard();
     bool validMove = false;
     while (!validMove)
     {
         Console.WriteLine("Please make a move (1-9):");
         int move;
         if (Int32.TryParse(Console.ReadLine(), out move))
         {
             if (board.GetMove(move) == 0)
             {
                 board.MakeMove(move, 2);
                 validMove = true;
             }
             else
             {
                 Console.WriteLine("Invalid move. Please try again.");
             }
         }
         else
         {
             Console.WriteLine("Invalid syntax. Please try again.");
         }
     }
 }
Пример #3
0
 public int GetBestMove(TicTacToeBoard board)
 {
     double max = -100000.0;
     int bestMoveSoFar = 0;
     for (int i = 1; i <= 9; i++)
     {
         if (board.GetMove(i) == 0)
         {
             TicTacToeBoard testBoard = new TicTacToeBoard(board);
             testBoard.MakeMove(i, 1);
             double moveScore = AlphaBeta(testBoard, -10000.0, 10000.0, 2);
             if (moveScore > max)
             {
                 max = moveScore;
                 bestMoveSoFar = i;
             }
         }
     }
     return bestMoveSoFar;
 }