Nabend,
Habe da gerade ein kleines Problem, und zwar arbeite ich zur Zeit an einer KI für TicTacToe. Mein bisheriger Code dazu sieht wie folgt aus:
Ich weiss, das ginge sicherlich noch schöner und eleganter, aber da habe ich gerade keine Lust zu
Die Idee dahinter is, dass ein Zug simuliert wird und danach geprüft wird, ob der Spieler gewonnen oder verloren hat. Hat er gewonnen, wird eine Variable um eins erhöht, hat er verloren um eins verringert. Trifft keines von beiden zu wird der nächste Zug simuliert.
Gleichzeitig wird der Zug mit der bisher höchsten "Punktzahl" gespeichert und am ende zurückgegeben. Mein Problem ist nun, das immer -1 zurückgegeben wird, was zu fehlern im weiterem verlauf des Programms führt.
Kann mir da wer helfen? Oder habe ich da eventuell einen völlig falschen Ansatz und mein ganzer Code ist quatsch?
Würde mich auf jeden Fall über hilfe freuen.
MFG:Gnoccy
Habe da gerade ein kleines Problem, und zwar arbeite ich zur Zeit an einer KI für TicTacToe. Mein bisheriger Code dazu sieht wie folgt aus:
Java:
public class KI
{
int gibZug(Feld f, boolean spieler1AmZug)
{
Feld kifeld = new Feld();
String spieler;
if (spieler1AmZug == true)
{
spieler = "X";
}
else
{
spieler = "O";
}
int zug = -1;
int bZugWert = 0;
int aZugWert = 0;
//Feld übertragen
for(int i = 0; i < 2; i++)
{
for(int j = 0;j < 2; j++)
{
kifeld.setField(i, j, f.getField(i, j));
}
}
for (int z1 = 0;z1 < 8; z1++)
{
int x1 = z1 % 3;
int y1 = (z1 - x1) / 3;
if(kifeld.isValidMove(z1))
{
System.out.println(z1);
kifeld.setField(x1, y1, spieler);
if(kifeld.gewonnen())
{
aZugWert =+ 1;
if(aZugWert >= bZugWert)
{
bZugWert = aZugWert;
zug = z1;
}
kifeld.setField(x1, y1, "__");
}
else
{
for(int z2 = 0; z2 < 8; z2++)
{
int x2 = z2 % 3;
int y2 = (z2 - x2) / 3;
if(kifeld.isValidMove(z2))
{
kifeld.setField(x2, y2, spieler);
if(kifeld.gewonnen())
{
aZugWert =- 1;
if(aZugWert >= bZugWert)
{
bZugWert = aZugWert;
zug = z1;
kifeld.setField(x2, y2, "__");
}
}
else
{
for (int z3 = 0;z3 < 8; z3++)
{
int x3 = z3 % 3;
int y3 = (z3 - x3) / 3;
if(kifeld.isValidMove(z3))
{
kifeld.setField(x3, y3, spieler);
if(kifeld.gewonnen())
{
aZugWert =+ 1;
if(aZugWert >= bZugWert)
{
bZugWert = aZugWert;
zug = z1;
kifeld.setField(x3, y3, "__");
}
}
else
{
for(int z4 = 0; z4 < 8; z4++)
{
int x4 = z4 % 3;
int y4 = (z4 - x4) / 3;
if(kifeld.isValidMove(z4))
{
kifeld.setField(x4, y4, spieler);
if(kifeld.gewonnen())
{
aZugWert =- 1;
if(aZugWert >= bZugWert)
{
bZugWert = aZugWert;
zug = z1;
kifeld.setField(x4, y4, "__");
}
}
else
{
for (int z5 = 0;z5 < 8; z5++)
{
int x5 = z5 % 3;
int y5 = (z5 - x5) / 3;
if(kifeld.isValidMove(z5))
{
kifeld.setField(x5, y5, spieler);
if(kifeld.gewonnen())
{
aZugWert =+ 1;
if(aZugWert >= bZugWert)
{
bZugWert = aZugWert;
zug = z1;
kifeld.setField(x5, y5, "__");
}
}
else
{
for(int z6 = 0; z6 < 8; z6++)
{
int x6 = z6 % 3;
int y6 = (z6 - x6) / 3;
if(kifeld.isValidMove(z6))
{
kifeld.setField(x6, y6, spieler);
if(kifeld.gewonnen())
{
aZugWert =- 1;
if(aZugWert >= bZugWert)
{
bZugWert = aZugWert;
zug = z1;
kifeld.setField(x6, y6, "__");
}
}
else
{
for (int z7 = 0;z7 < 8; z7++)
{
int x7 = z7 % 3;
int y7 = (z7 - x7) / 3;
if(kifeld.isValidMove(z7))
{
kifeld.setField(x7, y7, spieler);
if(kifeld.gewonnen())
{
aZugWert =+ 1;
if(aZugWert >= bZugWert)
{
bZugWert = aZugWert;
zug = z1;
kifeld.setField(x7, y7, "__");
}
}
else
{
for(int z8 = 0; z8 < 8; z8++)
{
int x8 = z8 % 3;
int y8 = (z8 - x8) / 3;
if(kifeld.isValidMove(z8))
{
kifeld.setField(x8, y8, spieler);
if(kifeld.gewonnen())
{
aZugWert =- 1;
if(aZugWert >= bZugWert)
{
bZugWert = aZugWert;
zug = z1;
kifeld.setField(x8, y8, "__");
}
}
else
{
for (int z9 = 0;z9 < 8; z9++)
{
System.out.println(aZugWert);
int x9 = z9 % 3;
int y9 = (z9 - x9) / 3;
if(kifeld.isValidMove(z9))
{
kifeld.setField(x9, y9, spieler);
if(kifeld.gewonnen())
{
System.out.println(aZugWert);
aZugWert =+ 1;
if(aZugWert >= bZugWert)
{
bZugWert = aZugWert;
zug = z1;
kifeld.setField(x9, y9, "__");
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
return zug;
}
}
Ich weiss, das ginge sicherlich noch schöner und eleganter, aber da habe ich gerade keine Lust zu
Die Idee dahinter is, dass ein Zug simuliert wird und danach geprüft wird, ob der Spieler gewonnen oder verloren hat. Hat er gewonnen, wird eine Variable um eins erhöht, hat er verloren um eins verringert. Trifft keines von beiden zu wird der nächste Zug simuliert.
Gleichzeitig wird der Zug mit der bisher höchsten "Punktzahl" gespeichert und am ende zurückgegeben. Mein Problem ist nun, das immer -1 zurückgegeben wird, was zu fehlern im weiterem verlauf des Programms führt.
Kann mir da wer helfen? Oder habe ich da eventuell einen völlig falschen Ansatz und mein ganzer Code ist quatsch?
Würde mich auf jeden Fall über hilfe freuen.
MFG:Gnoccy