# TicTacToe



## SouILcIRafT (23. Dez 2013)

Und zwar hab ich folgenden Arbeitsauftrag: TicTacToe_OO.doc - DocDroid
Ist jetzt keine Hausaufgabe die ihr für mich erledigen sollt oder so 
Auf jeden Fall ist es so, dass mein Informatiklehrer mich und fast die ganze Klasse immer ins kalte Wasser wirft.

Ich habe gelesen, dass sich Arrays empfehlen würden wobei ich sagen muss, dass wir darüber noch nichts gemacht haben.

1. Wie erstelle ich ein Spielfeld wo ich Eingaben machen kann?
2. Wie füge ich zwei Spieler ein?
3. Wie erkennt das Programm, dass entweder drei mal das X oder das O in einer Reihe sind?

Wenn ich nicht ganz klar ausdrücken konnte was ich meine tut es mir leid. Also bevor ihr mich zerfleischt fragt lieber nochmal kurz falls ihr mir helfen wollt ^^

LG


----------



## eMmiE (24. Dez 2013)

Hi,
das Spielfeld mit den Eingaben würde ich als Java-Anfänger (nicht negativ gemeint) erstmal mithilfe von Buttons darstellen.

D.h. du erstellst neun Buttons (Link:Buttonereignisse), für jedes Feld einen.
In dem Link ist recht übersichtlich dargestellt, wie man die Buttons benutzen kann.

Du legst jetzt in deinem Hauptprogramm für den Anfang 9 Variablen des Typs int an, welche du mit dem Wert 0 initialisierst.
Idee dahinter: Ist der Wert eines ints 1, dann sitzt dort ein x, bei 2 ein o, sonst ist das Feld leer.

Wir gehen vom Beispiel 1 des Links aus:
Wenn ein Button gedrückt wurde, dann ruft das Programm automatisch die ActionPerformed Methode des jeweiligen Buttons auf.
In dieser Methode musst du nun zum einen den Wertewechsel vollziehen und eine Methode aufrufen, die prüft, ob jemand gewonnen hat.


```
//Für Button 'linksOben' mit der zugehörigen Variable 'varLinksOben'
//wertewechsel:
if (varLinksOben == 0) {
varLinksOben = spieler;
if (varLinksOben == 1) {
linksOben.setText("x");
} else {
linksOben.setText("o");
}
} else {
System.out.println("Dieses Feld ist schon belegt");
}
```

Die Spielervariable ist meine Lösung zum Einbau von Spielern.
Du hast im Hauptprogramm einfach nur eine Variable, die dir anzeigt, ob gerade Spieler 1 oder Spieler 2 dran ist (-> Typ am Einfachsten int)
Wenn jetzt auf das Feld geklickt wird, dann untersucht er erst, ob auf dem Feld schon ein Wertewechsel vollzogen wurde und ändert dann, bei Negativem Ergebnis den Wert auf den 'spieler'-Wert

Um jetzt anzuzeigen, ob Spieler eins oder zei schon das Feld angeklickt haben, müssen wir nach dem Wertewechsel noch einen Textwechsel machen. Das machen wir mit der darauffolgenden if-Abfrage.

Um jetzt zu testen, ob jemand gewonnen hat oder ob das Spiel um ist, müssen wir jetzt eine verschachteltere if-Abfrage machen.

Probier das erstmal selbst, aber wenn du die Lösung haben willst:


Spoiler: Hohoho



//muss natürlich auch in die actionPerformed-Methode rein:
int sieger = 0;
if (varLinksOben != 0 && varLinksOben == varMitteOben && varMitteOben == varRechtsOben) {
// ist gleich einer Reihe oben, bei der die Werte geändert wurden
sieger = varLinksOben;
} else {...
//das Gleiche muss man jetzt natürlich auch für alle anderen Möglichkeiten machen

} else if (varLinksOben != 0 && varMitteOben != 0 && ...(alle restlichen Variablen)) {
//das Spiel ist vorbei
}

if (sieger != 0) {
System.out.println("Spieler " + sieger + " hat gewonnen");
}



Das mit den Arrays ist ähnlich, nur ist am Ende die Abfrage einfacher.
Ein Array ist ein Objekt, das die Speicherplätze mehrere Variablen verwalten kann.

Somit kannst du alle 9 Variablen in einem Array haben:
Vorher:
varLinksOben = 0;
varMitteOben = 0;
...

if (varLinksOben != 0 && varRechtsOben != 0 && ...) {...}

nachher:
int[] felder = new int[9];
for (int i = 0;i < 9;i++) {felder_ = 0;}

if (felder[0] != 0 && felder[1] != 0 && ...) {...}

Die zweite Möglichkeit besteht in einem 2-dimensionalen Array, was sich leichter vorstellen lässt.
Hattest du schon Matrizen in Mathe ?
So ähnlich ist das.

int[][] felder = new int[3][3];
-> felder[0][0] bezeichnet linksOben
-> felder[2][2] (beachte Java-Zählung 0...) bezeichnet rechtsUnten
-> felder[1][1] > MitteMitte usw...

Kannst ja mal Spasseshalber beides ausprobieren 

Gruß eMmiE

P.S.: Frohe Weihnachten_


----------



## Gucky (24. Dez 2013)

Ein Spielfeld, in das man Eingaben machen kann: ein 2D Array aus Text Feldern, die mit einer Schleife gesetzt werden. Alternativ ginge auch ein 2D Array mit Buttons, die bei Klicken das machen, was hier drunter beschrieben ist.
Zwei Spieler einfügen: abwechselnd ein x und ein o schreiben
Erkennung des Spielendes: von einem Kästchen ausgehend alle Richtungen prüfen, ob drei in einer Reihe sind. Das wird nach jedem Klick auf einen Button gemacht. Unnötige auschließen (wenn du oben links auf drei senkrecht nach unten geprüft hast, musst du das einen da drunter nicht auch tun)

EDIT: und mal wieder war jemand schneller *grmbl*


----------

