Java Zug beenden (tic tac toe)?

3 Antworten

 Ich habe jetzt zum Beispiel so eine Schleife : (...)

Wo ist da eine Schleife?

Die Ki hätte wäre die Schleife richtig gewonnen, (...)

Verständlich ist dein Satz nicht, doch ich vermute mal, es geht nur darum, das Spiel bei Sieg / Remis / Niederlage zu beenden.

Dein Spiel sollte innerhalb einer Schleife ablaufen (game loop) - jede Iteration stellt eine Runde / einen Zug dar. Je Runde wird auch der Zustand des Feldes geprüft (gab es einen Sieger oder wurde ein Gleichstand erreicht)? Anhand dieses Ergebnisses kannst du die Schleife vorzeitig abbrechen und das Spiel somit auch beenden.

Pseudocode:

while (!gameIsOver()):
  setMarkOnField()
  drawField()

Dabei kann die Methode, die prüft, ob das Spiel nun beendet ist, unterschiedlich agieren. Es mag reichen, nur einen boolschen Wert zurückzugeben (wie oben) oder man unterscheidet zwischen drei verschiedenen Zuständen (Victory, Draw, Failure). Für letzteren Fall wäre eine Enumeration geeignet.

Weißt du auch wie man einen Button macht der das Game neustartet?

Wie der Button umgesetzt wird, hängt von dem GUI-Toolkit ab, mit dem du arbeitest. Für Java bieten sich da verschiedene an: SWT, Swing, JavaFX, ...

In diesem Zusammenhang löst sich wohl auch die Notwendigkeit einer eigenen game loop auf bzw. man verwendet die draw calls / Events die das GUI-Toolkit auslöst, um das Spielfeld zu aktualisieren. Beachte in diesem Zuge, dass du die Oberfläche bei einem Toolkit wie Swing (lies hier) im richtigen Thread aktualisierst, um nicht auf Probleme zu stoßen.

Die Oberfläche könnte bspw. neun Buttons für das Spielfeld bieten. Bei Klick auf einen Button wird dessen Wert gesetzt (sofern möglich), gesetzte Buttons werden zudem in irgendeiner Form deaktiviert (bei Swing gäbe es bspw. die Möglichkeit, mit der setEnabled-Methode den Button auszugrauen) und der Zustand des Spielfeldes geprüft. Gibt der aktuelle Spielfeldzustand einen Sieger / ein Remis aus, wird das Spiel unterbrochen - sei es durch eine Messagebox (danach wird das Spielfeld wieder geleert) oder durch das zwischenzeitliche Deaktivieren aller Buttons. Der Button für einen Neustart setzt alle Buttons wieder auf ihren Anfangszustand zurück.

Leider ist Java einige der wenigen Programmiersprachen, mit denen ich selten bis nie arbeite. Allerdings solltest du es mal mit einem stop task Befehl versuchen (da ich davon ausgehe, dass du alles in Teilprobleme und Unterteilprobleme unterteilt hast und damit auch in einzelne tasks).
Dann wird einfach mit der nächsten task weitergemacht, und zwar "Ende". Die vorherigen tasks wurden gestoppt, sodass man sie nicht mehr benutzen kann.
Also ca. so:
task 1
task 2
task ki gewonnen
stop task (1, 2) [gehört zu task ki gewonnen, einrücken funktioniert nämlich irgendwie nicht]
task Ende

Hoffe, du hast alles verstanden, wenn nicht, frag mich einfach.
Mfg.
Xydru

Woher ich das weiß:eigene Erfahrung

Mach das ganze Tic-Tac-Toe als eine Funktion, und dann kannst du einfach "return 0/1/2" machen, wenn wer gewonnen hat, und die Funktion wird automatisch beendet und du erhältst den Gewinner.

winner = tictactoe();

public int tactactoe(){

... //Den Code für eine Runde TicTacToe hier.

}

Woher ich das weiß:Hobby – Programmieren ist mein Hobby & Beruf
RuderdenRolf 
Fragesteller
 29.04.2019, 18:21

Weißt du auch wie man einen Button macht der das Game neustartet?

0
MrAmazing2  29.04.2019, 18:27
@RuderdenRolf

Mach einen JButton, der, sobald man ihn anklickt, "winner = tictactoe();" ausführt.

0