public void play(TreeNode tr, int laufVar)
{
if(!(laufVar > difficulty))//Erstellen des Baumes + Simulieren bis in bestimmte Ebene
{
System.out.println("Play bei laufVar:" +laufVar);
int turn;
if(laufVar%2 != 0) //Bei ungerade sind es Züge von KI = Spieler2, von 0 zu 1, von 2 zu 3 etc.
turn = 2;
else
turn = 1;
for(int i = 0;i<6;i++)
{
System.out.println("Status an Stelle:" + i + " = " + hollows[i+7]);
int[] tmp = simulate(i,tr.getStatus(),turn);
if(tmp == null)
System.out.println("Füge kein Kind hinzu");
if(tmp!= null)
{
System.out.println("Füge Kind hinzu");
TreeNode child = tr.addNewChild(tmp,i);
play(child,(laufVar+1));
}
}
}
else//Weiterreichen der Werte nach oben
{
int[] status = tr.getStatus();
int value = (status[13] - hollows[13]) - (status[6] - hollows[6]); //Kommen in die KI-Mulde(=Player 2) Steine hinzu bzw. verliert die SpielerKI welche wirkt sich das positiv aus und umgekehrt
tr.setValue(value);//Abhandlung der untersten Ebene
System.out.println("Beginne jetzt mit Auswertung");
auswerten(tr.getParent(),(laufVar-1));
}
}
public void auswerten(TreeNode tr,int laufVar)//Kriegt immer parent übergeben
{
if(laufVar != 0)//Kinder suchen, vergleichen, und je nach Ebene(Spieler A/Spieler B) den kleinsten/größten Wert annehmen und eine Ebene raufgehen(durch tr.getParent())
{
System.out.println("Auswerten bei laufVar: "+laufVar);
int max = -255;
int min = 255;
ArrayList<TreeNode> childNodes = tr.getChildNodes();
for(int i = 0;i<6;i++)
{
TreeNode tmp = childNodes.get(i);
if(tmp != null)//Der Zweig wurde nicht weitergegangen, da Zug nicht möglich
{
if(laufVar%2 != 0)//Ebene vom Gegner da ungerade
{
if(tmp.getValue() < min)
tr.setValue(tmp.getValue());
}
else
{
if(tmp.getValue()>max)
tr.setValue(tmp.getValue());
}
}
}
auswerten(tr.getParent(),--laufVar);
}
else//Ganz oben angekommen, ein letztes vergleichen und play-Methode vom Controller aufrufen
{
int max = -255;
int index = 0;//Für Weitergabe des gewählten Zuges an Controller
ArrayList<TreeNode> childNodes = tr.getChildNodes();
for(int i = 0;i<6;i++)
{
TreeNode tmp = childNodes.get(i);
if(tmp != null)
{
if(tmp.getValue() > max)
{
tr.setValue(tmp.getValue());
index = i;
}
}
}
ctrl.KIplay(index);
}
}
Problem ist, dass er eine IndexOutOfBound-Exception auswirft für die erstellte ArrayList childNodes. Scheinbar wird in der for-Schleife der play-Methode auf die Abarbeitung der weiteren play-Methode gewartet, zumindestens wird nur 1x der Satz "Füge Kind hinzu" ausgegeben pro Variablenwert, und nicht wie zu erwartet 6^Laufvariablen mal.
Kann ich das irgendwie umgehen, dass auf die Abarbeitung der play-Methode gewartet wird?
Grüße