ein einfaches Tic Tac Toe Spiel

HufflePuff

Neues Mitglied
Hallo,

ich habe hier eine Aufgabe, bei der ich Hilfe beim richtigen Ansatz bräuchte.

Es geht um ein einfaches Tic Tac Toe Spiel, das Spielfeld ist mit den Zahlen von 0 bis 8 durchnummeriert:
0 1 2
3 4 5
6 7 8

Spieler 1 und 2 machen abwechselnd ein Kreuz oder einen Kreis und man geht davon aus, dass so lange gespielt wird, bis das Spielfeld voll ist (also auch weiterspielen, wenn ein Spieler schon gewonnen hat). Die Eingabe soll über Kommandozeilenparameter erfolgen.
Die einzige Ausgabe, die das Programm haben soll, ist, ob Spieler 1 oder Spieler 2 gewinnt, oder ob unentschieden ist.

Nun dachte ich, ich implementiere das wie folgt:
3 Klassen, einmal für das Spielfeld, einmal für die jeweilige Zelle, und einmal Main.
Das Spielfeld soll ein 2D-Array sein, bspw
int x;
int y;
int Board[][] = new int[x][y]

Alle Spielzellen werden nacheinander für Spieler 1 und Spieler 2 durchgegangen, also bspw.
if(player1 == 2){
Board[0][2] = X;
}
if(player1 == 3){
Board[1][0] = X;
}

Jetzt wüsste ich hier nur nicht, wie ich das einstellen kann, dass beide immer abwechselnd spielen. Und es soll auch nicht funktionieren, dass ein Feld zweimal besetzt werden kann. (das hätte ich mit einem boolean gemacht, der schaut, ob die Zelle leer ist oder nicht).


Könnte man das auch einfacher/schneller/übersichtlicher mit switch cases machen?
Oder mit Schleifen?
Jemand in meinem Kurs benutzt auch nur einen eindimensionalen Array, der einfach von 0 bis 8 durchnummeriert ist und da ja nur geschaut wird, wer gewinnt, könnte ich mir auch vorstellen, dass das möglich ist. Es werden sowohl objektorientiertheit als auch Übersichtlichkeit sowie Verständlichkeit und Ausführbarkeit bewertet.

Ich danke schonmal für eure Hilfe!
 
Den Spieler kannst du ermitteln, indem du ihn in einer Variable speicherst, die nach jedem Zug wechselt. Ein boolean würde reichen, aber eine ENUM-Klasse wäre besser. Dieser kannst du auch das Attribut für O bzw. X geben.

Das Spielfeld sollte nichts vom Spieler wissen, nur welches Feld wie gesetzt werden soll. Die Logik gehört an einer zentralen Stelle wie z.B. der main-Klasse. Spielregeln sollte es an anderer Stelle nicht geben, das hilft auch beim debuggen.

Bei deiner Durchnummerierung wäre ein 1D-Array Sinnvoller. So kannst du die Eingabe direkt auf die Zelle mappen.
Wie du es jetzt hast ist das Mapping von Nummer zu Zelle umständlch und Fehleranfällig! Aber natürlich kannst du mit switch case arbeiten, aber bitte nicht doppelt für spieler1 und spieler2.

Wenn du es wie oben genannt machst, könnte das dann so aussehen:
Java:
int cell = getInput();
switch(cell) {
  case 0: Board[0][0] = spieler.getSymbol(); break;
  ...
}

Eine Siegprüfung ist auch hier möglich. Es gibt genau 8 Möglichkeiten zu gewinnen. Also eine Methode mit 8 mal 3 Abfragen wäre das einfachste. Ob du diese dann nur aufrufst wenn alle Zellen voll sind, oder nach jedem Zug ist dann nur eine Zeile Code unterschied.
 

Neue Themen


Zurück
Oben