Umsetzung des Minimax-Algorithmus

Status
Nicht offen für weitere Antworten.
B

Boar

Gast
Hi!
Ich beschäftige mich im Moment mit der Programmierung verschiedener kleiner Brettspiele (z.B. TicTacToe und Vier Gewinnt). Die Umsetzung der Spiele an sich ist kein Problem, nur bei der Programmierung der Computergegner hakt es. Auf der Suche nach weiteren Informationen stolpert man zwangsläufig über den Minimax-Algorithmus (Informationen dazu gibt es hier). Jetzt hapert es da aber noch an der Umsetzung (Ich habe versucht den Pseudo-Code von Wikipedia (siehe Link) in Java zu programmieren).

Bei TicTacToe z.B. kann man den Suchbaum mit dem Minimax-Verfahren komplett aufbauen (weil die Anzahl der möglichen Züge verhältnismäßig klein ist). Deshalb spielt der Computergegner (wenn er richtig programmiert ist) perfekt. Bei meinem Programmier-Versuch spielt der Computer aber total bescheiden... Deshalb denke ich, dass ich einen Fehler im Code hab, ich weiß jedoch nicht wo.

Hier ist die Klasse, die den Minimax-Algorithmus enthält:

Code:
package spiel;

public class Comp {
    static int next;    
    static int wert;
    static char notC; 
    
    //Funktion maxWert
    public static int maxWert() {
        int ermittelt=-1000;
        int zugWert=0; 
        for(int i=0; i<9; i++){           
            //Suche mögliche Züge
            if(TicTacToe.position[i]=='L'){ //L = leeres Feld
                //Simuliere den Zug
                TicTacToe.position[i]='O';
                //Wenn keine Züge mehr möglich
                if(TicTacToe.voll()==true ||Sieg.sieg('O')==true)               
                    zugWert=bewertungsFunktion();                   
                else               
                    zugWert=minWert();
                //Zugsimulation zurücksetzen
                TicTacToe.position[i]='L';
                if(zugWert>ermittelt){
                    ermittelt=zugWert;
                    next=i; //für das Hauptprogramm (Position des nächsten Zugs)
                }
            }
        }
        return ermittelt;
    }
    //Funktion minWert
    public static int minWert() {
        int ermittelt=1000;
        int zugWert=0;
        int wert; 
        for(int i=0; i<9; i++){           
            //Suche mögliche Züge
            if(TicTacToe.position[i]=='L'){
                //Simuliere den Zug
                TicTacToe.position[i]='X';
                //Wenn keine Züge mehr möglich
                if(TicTacToe.voll()==true ||Sieg.sieg('X')==true)               
                    zugWert=bewertungsFunktion();                   
                else               
                    zugWert=maxWert();
                //Zugsimulation zurücksetzen
                TicTacToe.position[i]='L';
                if(zugWert<ermittelt)
                    ermittelt=zugWert;
            }
        }
        return ermittelt;
    }
    private static int bewertungsFunktion() 
    {                    
        if(Sieg.sieg('O')==true)
            return 1;     
        else if(Sieg.sieg('X')==true)
            return -1;
        else
            return 0;
    }
}

TicTacToe.position[0..8] speichert die Züge (X = menschliche Spieler, O = Computer, L = Leeres Feld)
Aufgerufen wird der Computerzug nachdem der menschliche Spieler gesetzt hat:
Code:
x = Comp.maxWert();
Setze.pos(Comp.next,'O',Color.blue);

Wenn ihr noch weitere Informationen braucht sagt bescheid.

Danke für die Hilfe!
 
B

Boar

Gast
Also dieser Post hilft mir auch nicht weiter, kann mir denn niemand helfen? Oder hat vielleicht einer einen Link wo der Algorithmus verständlich erklärt wird?
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
Anfänger2011 Minimap: Theoretische Frage zur Umsetzung Spiele- und Multimedia-Programmierung 2
A Langtons Ameise - Fragen zur Umsetzung Spiele- und Multimedia-Programmierung 1
Helgon Fragen zur Umsetzung Spiele- und Multimedia-Programmierung 17
N (Umsetzung) Scheinwerfer Spiele- und Multimedia-Programmierung 6
T Umsetzung eines 2D Jump and Runs Spiele- und Multimedia-Programmierung 7
F Umsetzung von einem Partikelsystem Spiele- und Multimedia-Programmierung 4
S Problem bzgl. Umsetzung eines Rollenspiel Spiele- und Multimedia-Programmierung 6
T Größeres Spiele Projekt - einige Fragen zur Umsetzung Spiele- und Multimedia-Programmierung 3
Fabel TicTacToe MiniMax Algorithmus geht nicht Spiele- und Multimedia-Programmierung 4
Z Minimax-Algorithmus für TicTacToe Spiele- und Multimedia-Programmierung 5
B minimax Algorithmus Spiele- und Multimedia-Programmierung 5
H MiniMax bei TicTacToe(x-O) funzt nicht (ganz :P) Spiele- und Multimedia-Programmierung 11
krgewb Anderer Algorithmus für Bounding Box Spiele- und Multimedia-Programmierung 9
F Algorithmus für bessere Kollisionsabfragen Spiele- und Multimedia-Programmierung 10
Z Such-Algorithmus Spiele- und Multimedia-Programmierung 2
E A-Stern Algorithmus Problem und Implementierung einer Map Spiele- und Multimedia-Programmierung 6
E Pathfinding Algorithmus Spiele- und Multimedia-Programmierung 2
S Problem mit 4 gewinnt(MinMax Algorithmus) Spiele- und Multimedia-Programmierung 2
S A*-Algorithmus Spiele- und Multimedia-Programmierung 12
S A* Algorithmus Spiele- und Multimedia-Programmierung 14
S Algorithmus zur Ressourcesuche für die KI Spiele- und Multimedia-Programmierung 5
C Algorithmus um Flächen zu erkennen Spiele- und Multimedia-Programmierung 6
L Fehlersuche beim Weichzeichner-Algorithmus Spiele- und Multimedia-Programmierung 9
A Negamax-Algorithmus Spiele- und Multimedia-Programmierung 7

Ähnliche Java Themen


Oben