# KI für TicTacToe spiel



## SebiB90 (15. Nov 2004)

ich hab ein tictactoe spiel gemacht und wollt auch ein "einzelspielermodus" machen dafür brauch ich auch ne "KI". nur ich weiß nicht wie ich das machen soll.
ich speicher in einem 2 dimensionalen array(3x3 groß) wo wer geklickt hat
könnt ihr mir helfen?


----------



## Griffin (15. Nov 2004)

Ne ziemlich dumme KI wäre, wenn du die klicks des Computers zufällig platzieren würdest. Könnte die Stufe "leicht" sein!
Auf "mittel" könnte die KI bestimmte Ziele verfolgen. Also wirklich versuchen drei in einer Reihe zu bekommen, klickt der Spieler in diese Reihe sucht sich die KI eine andere.
Und auf "hart" könnte die KI alles dran tun, dass der Spieler nicht gewinnt. Also Versuchen ein unentschieden raus zuholen.
Ist jetzt alles theoretisch. Wie du das umsetzt ist jetzt dein Ding


----------



## SebiB90 (15. Nov 2004)

die stufe "leicht is noch leicht zu machen
aber wie macht man die anderen?

und wie kann man per programm code ein jButton drücken?


----------



## Wildcard (15. Nov 2004)

Du kannst zum Beispiel ein Wertigkeitssystem einführen.
Deine "KI" muss wissen das es wichtiger ist eine eigene 3er Reihe zu
vervollständigen als eine gegnerische Reihe zu blockieren.
eine gegnerische Reihe zu blockieren ist wiederum wichtiger als ein Kreuz zu
setzen ohne zu gewinnen usw.
Bei der Stufe schwer müsste er eine Taktik anwenden und notfalls auf ein unentschieden spielen.
Einfach mal kreativ sein  :wink:


----------



## SebiB90 (15. Nov 2004)

muss ich jetzt jede reihe prüfen wenn frei feld da ist irgendwo speichern und wenn 2 meiner drin sind den in das frei feld setzen und das 8 mal dann nochmal 8 mal falls es keine reihe gibt und ich überprüfen muss ob er gegner 2 seiner in der reihe sind in das leere feld setzen und wenn es das auch nicht gibt einfach random machen.
is das nicht einbischen aufwendig und geht das nicht einfacher mit irgendeinem algo?

und nochmal:
wie kann man per programm code ein jButton drücken?


----------



## Beliar (15. Nov 2004)

Ich glaub da gibts ne Methode fireAciton oder so.
Aber das ist nicht so gut, die Programmlogik und die GUI Sollten doch getrennt sein.
Du kannst ja eine Logik klasse schreiben in der das Spielfeld als 2dim Array gespeichert wird
und in der GUI hast ne routine die dieses Array Abklappert und danach die Buttons beschriftet.
Wenn bei dir die Felder JButtons sind.

Bei mir (Ich hab auch mal ein TicTacToe applet geschrieben) funktioniert die KI so.
Erst such die KI nach 2 eigene feldern in einer reihe um daneben zu setzten um das spiel zu gewinnen.
Ist das nicht möglich werden 2 gegnerische STeine gesucht um den sieg vom gegner zu verhindern.
WEnn ddie situation auch nicht zutrifft wir 1 eigener stein gesucht und ich glaub zufällig in seiner umgebung
(halt so dass sich mal 3 in einer reihe ergeben könnten) gesetzt.
Hat die KI noch kein Feld oder ist es aus einem anderen grund nicht möglich dass die 3 anderen
aktionen gesetzt werden setzt die KI zufällig.

greetz, The_Flow


----------



## Wildcard (15. Nov 2004)

Sind doch nur neun Felder.
Würde bei jedem gesetzten X neue wertigkeiten für die freien Felder erstellen, 
und die höchste wertigkeit besetzen oder was in die richtung.
Aber du hast recht, gibt natürlich was einfachereres:

```
ComputerGegner ki = new ComputerGegner(ComputerGegner.LEICHT);
```
  

ruf doch einfach die gleiche Methode auf wie deine ActionPerformed Methode
oder wie meinst du das?


----------



## SebiB90 (15. Nov 2004)

ich hab nur fireActionPerformed gefunden aber ich brauch ein actionevent als parameter nur ich hab keine ahnung wie ich das erstellen soll

gui und logik getrennt :lol: 
da wirst du von nix im spiel finden is nur eine datei mit 2 oder 3 anonymen klassen
hab ich eigentlich erst nur neben bei mal gemacht und hab alles in eine datei geschmissen
und wie ich gui und logik trennen soll hab ich keinen plan von bin noch newbie und muss mal wieder das buch weiter lesen(ich hasse lesen). ich mach grad learning by doing.

dann mach ich mal die ki so wie du beschirieben hast weiß auch keine andere mörlichkeit

die actionperformed methode aufrufen geht nicht siehe oben

edit:
@painkiller
falls dein tictactoe online ist kannst du es mal verlinken?

edit2:
hab grad mal in der api doku nachgeguckt
und weiß jetzt wie man ein actionevent erstellt


----------



## 0xdeadbeef (15. Nov 2004)

http://www.hausarbeiten.de/faecher/hausarbeit/ine/15117.html


----------



## CelikBlek (16. Nov 2004)

SebiB90 hat gesagt.:
			
		

> und nochmal:
> wie kann man per programm code ein jButton drücken?


Mach erstmal so. ohne fireChanged(...). 

```
JButton m_jbAbbrechen = new JButton("Abbrechen");
...
m_jbAbbrechen.addActionListener(new ActionListener()
{
    public void actionPerformed(ActionEvent evt)
    {
        // hier sollen deine krams erledigt werden.
    }
});
```


----------



## Nuke (16. Nov 2004)

Da gabs glaub ich schon mehrere Threads drüber
http://www.java-forum.org/de/viewtopic.php?t=5239&highlight=tictactoe


----------



## SebiB90 (16. Nov 2004)

@0xdeadbeef
werd ich mir mal angucken

@Nuke
sorry hab die boardsuche nicht benutzt  

@CelikBlek
ich versteh richtig was du meinst ???:L


----------

