Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // currentPlayer = 2 - нолики. Минимум
- // currentPlayer = 1 - крестики. Максимум
- int[] minimax(char[][] field, int currentPlayer, int depth) {
- int[] returnArray = new int[3];
- int bestScore;
- if (currentPlayer == 2) {
- bestScore = 500;
- } else {
- // currentPlayer == 1. Крестики
- bestScore = -500;
- }
- int currentScore;
- int bestRow = -1;
- int bestCol = -1;
- // выяснение терминального состояния:
- /* Проверяем:
- * 1) Проверяем глубину дерева
- * 2) Проверяем победил ли кто
- * 3) Проверяем полное ли поле*/
- if (isTerminal(field, depth)) {
- bestScore = evaluate(field); // оценка состояния листа дерева. 10 победа нулей, -10 победа крестиков, 0 - ничья/игра не окончена, но глубина поиска кончилась
- } else {
- for (int i = 0; i < field.length; i++) {
- for (int j = 0; j < field.length; j++) {
- if (field[i][j] == '.') {
- if (currentPlayer == 2) {
- // currentPlayer == 2 - нули
- // вызываем минимакс 1
- field[i][j] = 'O';
- currentScore = minimax(field, 1, depth - 1)[0];
- if (currentScore < bestScore) {
- bestScore = currentScore;
- bestRow = i;
- bestCol = j;
- }
- field[i][j] = '.';
- } else {
- // currentPlayer == 1 - крестики
- // вызываем максимин 2
- field[i][j] = 'X';
- currentScore = minimax(field, 2, depth - 1)[0];
- if (currentScore > bestScore) {
- bestScore = currentScore;
- bestRow = i;
- bestCol = j;
- }
- field[i][j] = '.';
- }
- }
- }
- }
- }
- returnArray[0] = bestScore;
- returnArray[1] = bestRow;
- returnArray[2] = bestCol;
- return returnArray;
- }
Add Comment
Please, Sign In to add comment