3. Siegbedingung 🏆
Unser Tic-Tac-Toe endet bisher nie — selbst bei drei in einer Reihe läuft es weiter. Das ändern wir jetzt.
Dafür brauchen wir zwei Hilfsfunktionen (sie sind beim Wechsel in dieses Kapitel ganz oben in deiner Datei dazugekommen):
isDraw(cells)— ist das Spiel unentschieden (alle Felder voll)?isVictory(cells)— hat jemand gewonnen, und wenn ja, wer?
Die Test-Boxen in der Spiel-Sektion prüfen isDraw, isVictory und endIf
automatisch, sobald du ▶ Ausführen drückst.
isDraw — ist das Spiel unentschieden?
Schreibe isDraw(cells) so, dass es true zurückgibt, wenn alle Zellen belegt
sind, und sonst false.
isVictory — hat jemand gewonnen?
Ein Spieler gewinnt mit drei gleichen Markierungen in einer Reihe — horizontal,
vertikal oder diagonal. Schreib isVictory(cells) so, dass es die Markierung des
Gewinners ("0" oder "1") zurückgibt, falls es einen gibt, und sonst null.
Stell dir die 9 Felder so vor — die Zahl ist der Index im Array:
0 | 1 | 2
---------
3 | 4 | 5
---------
6 | 7 | 8
💡 Überlege wann genau ein Tic-Tac-Toe Spiel gewonnen ist. Es gibt nicht so viele verschiedene Möglichkeiten, allerdings musst du natürlich alle überprüfen.
endIf — das Spiel beenden
Jetzt verdrahten wir die beiden Funktionen. boardgame.io ruft endIf nach
jeder Zustandsänderung auf, um zu prüfen, ob das Spiel vorbei ist.
endIf: function endIf(endIf) {
// falls das Spiel unentschieden ist:
// return { draw: true }
// falls ein Spieler gewonnen hat:
// return { winner: winnerPlayerID }
// falls das spiel nicht zu ende ist:
// return null
},
📌 Info —
endIfbekommt (wie ein Move) ein Objekt mitG. Gibt die Funktion irgendetwas zurück, ist das Spiel vorbei und der Rückgabewert steht unterctx.gameover. Gibt sie nichts zurück, läuft das Spiel weiter. Damit später der Bot funktioniert, sollte der Gewinner als{ winner: ... }zurückkommen.
👉 Deine Aufgabe: Fülle die drei TODO Kapitel 3 aus (erst isDraw und
isVictory, dann endIf). Danach ist dein Spielfeld (in der Spiel-Sektion)
vollständig spielbar.
Übung 🎯 — Das vollständige Spiel
Die Auswertung (unter „Übung“ in der Spiel-Sektion) spielt zwei komplette Partien gegen dein Spiel: eine mit Gewinner und eine, die unentschieden endet.
Geschafft! 🚀
Neu in diesem Kapitel:
- Hilfsfunktionen (
isDraw,isVictory) neben dem Spielobjekt. endIf— wird nach jeder Zustandsänderung aufgerufen; gibt sie etwas zurück, ist das Spiel vorbei (ctx.gameover).
Dein Tic-Tac-Toe ist jetzt voll spielbar für zwei Personen. Im letzten Kapitel bekommt es einen Computer-Gegner.