Exemplo n.º 1
0
 public int MakeTurn(Connect4Board b)
 {
     int depth = 5;
     if (round >= 25) depth = 7;
     else if (round >= 32) depth = 100;
     double max = -10000.0;
     int bestMoveSoFar = 0;
     for (int i = 0; i < b.GetNrColumns(); i++)
     {
         if (b.IsValidMove(i))
         {
             Connect4Board testBoard = new Connect4Board(b);
             testBoard.AddDisc(i, botId);
             double moveScore = AlphaBeta(testBoard, depth, -100000.0, 100000.0, false);
             //DisplayScore(moveScore, i);
             if (moveScore > max)
             {
                 max = moveScore;
                 bestMoveSoFar = i;
             }
         }
     }
     //b.DisplayBoard();
     return bestMoveSoFar;
 }
Exemplo n.º 2
0
 public int MakeTurn(Connect4Board b)
 {
     double max = -10000.0;
     int bestMoveSoFar = 0;
     for (int i = 0; i < b.GetNrColumns(); i++)
     {
         if (b.IsValidMove(i))
         {
             Connect4Board testBoard = new Connect4Board(b);
             testBoard.AddDisc(i, botId);
             double moveScore = AlphaBeta(testBoard, depth, -10000.0, 10000.0, false);
             if (moveScore > max)
             {
                 max = moveScore;
                 bestMoveSoFar = i;
             }
         }
     }
     return bestMoveSoFar;
 }
Exemplo n.º 3
0
 public double AlphaBeta(Connect4Board oldBoard, int d, double alpha, double beta, bool player)
 {
     if (d == 0 || (CheckForWin(oldBoard) != 0 || CheckForDraw(oldBoard)))
     {
         return Score(oldBoard);
     }
     if (player)
     {
         double val = -100000.0;
         for (int i = 0; i < oldBoard.GetNrColumns(); i++)
         {
             if (oldBoard.IsValidMove(i))
             {
                 Connect4Board newBoard = new Connect4Board(oldBoard);
                 newBoard.AddDisc(i, botId);
                 val = Math.Max(val, gamma * AlphaBeta(newBoard, d-1, alpha, beta, !player));
                 alpha = Math.Max(alpha, val);
                 if (beta <= alpha) break;
             }
         }
         return alpha;
     }
     else
     {
         double val = 100000.0;
         for (int i = 0; i < oldBoard.GetNrColumns(); i++)
         {
             if (oldBoard.IsValidMove(i))
             {
                 Connect4Board newBoard = new Connect4Board(oldBoard);
                 newBoard.AddDisc(i, (3- botId));
                 val = Math.Min(val, gamma * AlphaBeta(newBoard, d-1, alpha, beta, !player));
                 beta = Math.Min(val, beta);
                 if (beta <= alpha) break;
             }
         }
         return beta;
     }
 }