Почему ошибочен мой минимаксный алгоритм для connect 4?
Всем привет, я здесь новенькая.
Я был с прошлой недели заморожен с ними, я не знаю, почему моя программа не работает. На самом деле я думаю, что знаю почему, и я думаю, что из-за минимаксной функции.Но как мне поступить? Здесь у вас есть код, связанный с минимаксом.
Я думаю, что каждая функция объяснена в коде. Если вы чего-то не понимаете, дайте мне знать.
Спасибо вам за помощь!
Что я уже пробовал:
<pre lang="java"> public class Node { public int score; public int move; public ArrayList<Node> hijos; public Node () { score = -1; move = -1; hijos = new ArrayList<>(); } public Node(int s, int m) { score = s; move = m; } public Node (Node n) { score = n.score; move = n.move; } public int getScore() { return score; } public void addHijo (Node n) { hijos.add(n); } } /** * The board of the game is in m_tablero * When function ends the move chosen will be at m_columna */ public void minimax() { Node arbol = new Node(); int v = 0; for (int i = 0; i < 7; i++) { Tablero tablero_copia = new Tablero(m_tablero); //ponerFicha puts a token in a column for a player tablero_copia.ponerFicha(i,2); v = Max(tablero_copia, arbol, 1); arbol.addHijo(new Node(v, i)); } v=0; for (Node item: arbol.hijos) { //It prints the moves and their scores System.out.println("Lista: Score->" + item.score + ", Move->" + item.move); //Choose the best if (item.score > v) { v = item.score; m_columna = item.move; } } } public int Max(Tablero tablero, Node n, int depth ) { int devuelve = -1; Tablero tablero_anterior = new Tablero (tablero); if (depth == NIVEL_DEFECTO) { //f function is the evaluation function, for getting a score given a board and a player return (f(tablero,2) - f(tablero,1)); //cuatroEnRaya, returns if a player has won } else if (tablero.cuatroEnRaya() == 2) { devuelve = (Integer.MAX_VALUE) - f(tablero,1); } else if (tablero.tableroLleno()) { return 0; } else { for (int i = 0; i < 7; i++) { tablero = tablero_anterior; tablero.ponerFicha(i, 1); devuelve = max(Min(tablero, n, depth+1), devuelve); n.addHijo(new Node(devuelve, i)); } } return devuelve; } public int Min(Tablero tablero, Node n, int depth) { int devuelve = -1; Tablero tablero_anterior = new Tablero (tablero); if (depth == NIVEL_DEFECTO) { return f(tablero,1) - f(tablero,2); } else if (tablero.cuatroEnRaya() == 1) { devuelve = (Integer.MAX_VALUE) - f(tablero,2 ); } else if (tablero.tableroLleno()) { return 0; } else { for (int i = 0; i < 7; i++) { tablero = tablero_anterior; tablero.ponerFicha(i, 2); devuelve = min(devuelve, Max(tablero, n, depth+1)); n.addHijo(new Node(devuelve, i)); } } return devuelve; }
[no name]
Научиться использовать отладчик и использовать его для отладки кода-это полезный навык для развития.