Methoden MinMax 4 Gewinnt

shiroX

Mitglied
Hallo, nochmal eine kurze Frage von mir. Ich habe für 4 Gewinnt meinen MinMax von TicTacToe umgeschrieben und er funktioniert auch soweit ganz gut bis auf die Tatsache dass er mich irgendwie immer erst einen Zug zu spät blockt und ich komme einfach nicht drauf warum.

Also eigentlich sollte er wenn der Wert currentScore 0 ist in diese Spalte werfen um mich dann logischerweise zu blocken, dass macht er aber irgendwie immer erst wenn ich dann schon wieder dran bin und gewinnen könnte. Die Suchtiefe die wir benutzen ist 6.

Java:
public int negamax(int depth, int player, Board brd) {
       
        List<Integer> availableMoves = brd.listMoves();

        if (availableMoves.isEmpty() || depth == 0) {
            return 0;
        }

        if (brd.isWin(2)) {
            return -1;
        }

        if (brd.isWin(1)) {
            return +1;
        }

       

        int max = Integer.MIN_VALUE;
        int min = Integer.MAX_VALUE;

        for (int i = 0; i < availableMoves.size(); i++) {

            Integer gameMove = availableMoves.get(i);

            if (player == 1) {
                brd.makeMove(gameMove, 1);
                int currentScore = negamax(depth - 1, 2, brd);
                max = Math.max(currentScore, max);
                log.log("Generierter Spielzug von MinMax in Spalte: " + Integer.toString(gameMove)
                        + " des Spielers 1 und dem Feld " + (i + 1) + " = " + currentScore);

                if (depth == gameDepth) {
                    System.out.println("Der erreichbare Score für den PC für die Bordposition " + (i + 1) + " lautet: "
                            + currentScore);
                }

                if (currentScore >= 0) {
                    computersGameMove = gameMove;
                } else if (currentScore == -1) {
                    brd.undoMove(player);
                    continue;
                }
                if (i == availableMoves.size() - 1 && max > 0) {
                    if (depth == gameDepth)
                        computersGameMove = gameMove;
                }
            } else if (player == 2) {
                brd.makeMove(gameMove, 2);
                int currentScore = negamax(depth - 1, 1, brd);
                min = Math.min(currentScore, min);
                log.log("Generierter Spielzug von MinMax in Spalte: " + Integer.toString(gameMove)
                        + " des Spielers 2 und dem Feld " + (i + 1) + " = " + currentScore);

                if (min == -1) {
                    brd.undoMove(player);
                    break;
                }
            }
            brd.undoMove(player);
        }
        return (player == 1) ? max : min;
    }

Paar Infos:
- gameDepth ist die angesprochene Suchtiefe von 6, also ein int-Wert
- Ich bin Spieler 2, der Computer ist Spieler 1
- Die listMoves()-Methode ist für die noch freien Spalten in die eingeworfen werden kann
- undoMove() macht einen Zug rückgängig
- in der Ausgabe die ich als Syso hab steht auch immer der Wert für die Spalte (in dem Fall 0) wo er mich blocken müsste, aber er macht es wie gesagt einen Zug zu spät.

Vielleicht hat ja jemand von euch eine Idee woran das liegen könnte, ansonsten spielt er nämlich in Ordnung. Die Anforderung ist nicht dass er perfekt spielen soll, aber er sollte schon korrekt blocken.

Danke schonmal :)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
S MinMax Programm erstellen Java Basics - Anfänger-Themen 4
M Minimax-Algorithmus für Vier gewinnt Java Basics - Anfänger-Themen 11
M GUI für Vier-Gewinnt. Java Basics - Anfänger-Themen 4
B Zusammenhängende Blöcke bei x-gewinnt erkennen? Java Basics - Anfänger-Themen 14
M monte carlo Algorithmus für 4 gewinnt Java Basics - Anfänger-Themen 12
J Vier gewinnt in Java,Spieler Konstruktor Java Basics - Anfänger-Themen 8
Kamy Ein einfaches "Vier Gewinnt" Spiel für Anfängerin Java Basics - Anfänger-Themen 51
K Methoden 4 Gewinnt checkDiagonal Methode Java Basics - Anfänger-Themen 10
O Methoden Fehlermeldung(Illegal start of expression) bei 4-Gewinnt-Spiel Java Basics - Anfänger-Themen 5
M Erste Schritte KI für 4 Gewinnt Hilfe! Java Basics - Anfänger-Themen 5
H 3 Gewinnt, Fehler bei Neustart Java Basics - Anfänger-Themen 6
A Tic Tac Toe - Vier Gewinnt Java Basics - Anfänger-Themen 5
L 5 Gewinnt Array[][] probleme Java Basics - Anfänger-Themen 20
B 4 Gewinnt KI? Java Basics - Anfänger-Themen 9
E Weiteres Vier Gewinnt-Spiel Java Basics - Anfänger-Themen 2
J Reset Button im Spiel Vier gewinnt einrichten Java Basics - Anfänger-Themen 8
JFeel-x 4 gewinnt-Versuch + Probleme Java Basics - Anfänger-Themen 2
G boolean Methode Vier gewinnt Java Basics - Anfänger-Themen 6
B Problem mit Drei-Gewinnt-Spiel Java Basics - Anfänger-Themen 24
G Problem mit Array bei einem 4-Gewinnt Spiel Java Basics - Anfänger-Themen 2
A MiniMax- Algorithmus für 4-Gewinnt Java Basics - Anfänger-Themen 3
G Algorithmus im Spiel "vier gewinnt" Java Basics - Anfänger-Themen 3

Ähnliche Java Themen

Neue Themen


Oben