ich wünsche einen schönen spät-nachmittag!
ich habe ein kleines problem! ich will eine künstliche intelligenz für 5-wins schreiben. (man spielt auf einem feld, 2 spieler, ca 10*10, und muss 5 steine horizontal oder diagonal in eine reihe kriegen, dabei fallen die steine nicht nach unten wie bei 4 gewinnt.)
ich habe 3 klassen: spielfeld, feldbewertung und KI. doch bei der KI komme ich nicht ganz weiter.
kann mir das jemand erklären? hier mein code:
Das Feld:
Die Bewertungsfunktion (Testversion):
die "KI" (das problem!) :
wo ist mein denkfehler? was fehlt mir? könnt ihr mir helfen und mir sagen, was ich tun muss?
mit freundlichen grüßen
don house
ich habe ein kleines problem! ich will eine künstliche intelligenz für 5-wins schreiben. (man spielt auf einem feld, 2 spieler, ca 10*10, und muss 5 steine horizontal oder diagonal in eine reihe kriegen, dabei fallen die steine nicht nach unten wie bei 4 gewinnt.)
ich habe 3 klassen: spielfeld, feldbewertung und KI. doch bei der KI komme ich nicht ganz weiter.
kann mir das jemand erklären? hier mein code:
Das Feld:
Code:
import java.util.ArrayList;
public class feld {
public ArrayList <Integer> feld;
feld()
{
feld=new ArrayList<Integer>();
for(int i=0;i<64;i++)
{
feld.add(0); // 64 spielfelder, leer.
}
}
public void setZug(int pos, int color) //0=leer, 1=weiß, 2=schwarz
{
feld.set(pos, color);
}
}
Die Bewertungsfunktion (Testversion):
Code:
public class feldwert {
feld F;
int value; // der zugwert: 0=draw, 1=sieg, -1=niederlage
feldwert(feld F)
{
this.F=F;
}
public int getFeldwert(feld F, int color)
{
value=0;
for(int i=0; i<62; i++) // 62, weil 64+2 => out of bounds
{
if(F.feld.get(i)==color && F.feld.get(i+1)==color && F.feld.get(i+2)==color)
// bis jetzt gewinnt man nur mit 3 in einer reihe
{
value=1;
}
}
return value;
}
}
die "KI" (das problem!) :
Code:
public class KI {
int besterzugwert=-999; // der beste ermittelte zug
int besterzug;
int zugwert;
int farbe; // farbe wechseln von 1>2 oder 2>1
feldwert FW;
KI()
{
}
public int getKizug(feld F, int color, int suchtiefe )
{
FW= new feldwert(F);
for(int z=0; z<64; z++)
{
if(F.feld.get(z)==0 && suchtiefe>0) // wenn das feld noch frei ist und die angegebene suchtiefe noch nicht erreicht ist
{
F.setZug(z, color);
zugwert=FW.getFeldwert(F, color);
if(zugwert>besterzugwert)
{
besterzug=z; // das passt noch nicht ganz, weil er ja den zug aus suchtiefe 1 ausgeben muss!?
}
}
if(color==1){ farbe=2;} if(color==2){farbe=1;} // anderer spieler ist dran
getKizug(F, farbe, suchtiefe-1);
}
return besterzug;
}
}
wo ist mein denkfehler? was fehlt mir? könnt ihr mir helfen und mir sagen, was ich tun muss?
mit freundlichen grüßen
don house