MiniMax algorithmus

choosebox

Grünschnabel
Hi zusammen

Momentan bin ich dabei ein TicTacToe zu Programmieren. Als KI verwende ich MiniMax und da fangen die Probleme an. Der Computer reagiert zwar auf mich und versucht zu gewinnen bzw. hält mich auf, jedoch stimmt irgendwas noch nicht. wenn er die möglichkeit hat setzt er die steine so, dass beide auf dem gleichen feld gewinnen können, was bedeutet, das der nächste Zug gewinnt, was jedoch der Spieler ist. Beispiel:

XX[]
[][]O
[][]O

ES sind 4 Klassen vorhanden SpielerC(Der Computer, sprich minimax alg.) SpielerH (Der Mensch Human) Board(Das Spielbrett) und Field das Spielfeld. Ich weis, dass diese Struktur nicht optimal ist, jedoch ist es auch nur eine Übung für mich um MiniMax verstehen zu können und schlussendlich in mein Schachprogramm implementieren kann.

Hier der Alg:

Code:
public int maxWert(int resttiefe) {

    int ermitteltM = -1;
    int zugWertM = 0;
    Vector<Integer> zuege = this.possibleMoves();
   
    for (int z = 0; z < this.possibleMoves().size(); z++) {
      cmd++;
      zuege = this.possibleMoves();
     /* if(zuege[z] == 4)
      {
        doNext = 4;
        ermitteltM = 15;
      }
      else{*/
      this.executeMove(zuege.elementAt(z));
     // System.out.println("MAX:");
    // dump();
      if (finished() || resttiefe == 0) {
       // System.out.print("Bewertung");
        zugWertM =  bewertungsfunktion();
       // System.out.print(zugWertM);
      } else {
        zugWertM =  minWert(resttiefe - 1);
      }
      //System.out.print("ACHTUNG!");
      this.moveBack();
      resttiefe = resttiefe +1;
    //dump();
     
      if (zugWertM > ermitteltM) {
        ermitteltM = zugWertM;
        doNext = zuege.elementAt(z);
      }
     // }
   
    }
    System.out.println(cmd);
    return (ermitteltM);
  }

  public int minWert(int resttiefe) {
    int ermittelt = 1;
    int zugWert = 0;
    Vector<Integer> zuege = this.possibleMoves();
   
    for (int z = 0; z < this.possibleMoves().size(); z++) {
      cmd++;
      zuege = this.possibleMoves();
      //if(zuege[z] == 4)
     // {
    //    doNext = 4;
    //    ermittelt = -15;
     // }
     // else{
      this.executeMove(zuege.elementAt(z));
      // System.out.println("MIN:");                                           
      //dump();                                                               
      if (finished() || resttiefe == 0) {                                     
       // System.out.print("Bewertung");                                           
        zugWert =  bewertungsfunktion();
        //System.out.print(zugWert);
      }else {
        zugWert = maxWert(resttiefe - 1) ;
      }
     
      this.moveBack();
      resttiefe = resttiefe +1;
    //dump();
     
     
      if (zugWert < ermittelt) {
        ermittelt  = zugWert;
       
      }
     // }
    }
    System.out.println(cmd);
    return (ermittelt);
  }

ausgeführ wird schlussendlich der zug: doNext auf wunsch kann ich den ganzen Code irgendwo hochladen, fals mein Problem nicht am Algoritmus liegt.
 
Hey,
da ich erst vor ein paar Wochen das selbe Problem hatte und mein 4 Gewinnt mit Minimax-Algorithmus jetzt funktioniert, würde ich gern mal deinen ganzen Code sehen, da ich oberflächlich in deinem Code-Ausschnitt keine Fehler erkennen kann.

Gruß Alex;)
 
Zurück