Guest User

Untitled

a guest
Jan 6th, 2016
100
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 2.63 KB | None | 0 0
  1. // currentPlayer = 2 - нолики. Минимум
  2.     // currentPlayer = 1 - крестики. Максимум
  3.     int[] minimax(char[][] field, int currentPlayer, int depth) {
  4.         int[] returnArray = new int[3];
  5.         int bestScore;
  6.         if (currentPlayer == 2) {
  7.             bestScore = 500;
  8.         } else {
  9.             // currentPlayer == 1. Крестики
  10.             bestScore = -500;
  11.         }
  12.         int currentScore;
  13.         int bestRow = -1;
  14.         int bestCol = -1;
  15.         // выяснение терминального состояния:
  16.         /* Проверяем:
  17.     * 1) Проверяем глубину дерева
  18.     * 2) Проверяем победил ли кто
  19.     * 3) Проверяем полное ли поле*/
  20.         if (isTerminal(field, depth)) {
  21.             bestScore = evaluate(field); // оценка состояния листа дерева. 10 победа нулей, -10 победа крестиков, 0 - ничья/игра не окончена, но глубина поиска кончилась
  22.         } else {
  23.             for (int i = 0; i < field.length; i++) {
  24.                 for (int j = 0; j < field.length; j++) {
  25.                     if (field[i][j] == '.') {
  26.                         if (currentPlayer == 2) {
  27.                             // currentPlayer == 2 - нули
  28.                             // вызываем минимакс 1
  29.                             field[i][j] = 'O';
  30.                             currentScore = minimax(field, 1, depth - 1)[0];
  31.                             if (currentScore < bestScore) {
  32.                                 bestScore = currentScore;
  33.                                 bestRow = i;
  34.                                 bestCol = j;
  35.                             }
  36.                             field[i][j] = '.';
  37.                         } else {
  38.                             // currentPlayer == 1 - крестики
  39.                             // вызываем максимин 2
  40.                             field[i][j] = 'X';
  41.                             currentScore = minimax(field, 2, depth - 1)[0];
  42.                             if (currentScore > bestScore) {
  43.                                 bestScore = currentScore;
  44.                                 bestRow = i;
  45.                                 bestCol = j;
  46.                             }
  47.                             field[i][j] = '.';
  48.                         }
  49.                     }
  50.                 }
  51.             }
  52.         }
  53.         returnArray[0] = bestScore;
  54.         returnArray[1] = bestRow;
  55.         returnArray[2] = bestCol;
  56.         return returnArray;
  57.     }
Add Comment
Please, Sign In to add comment