2. Spielverbesserungen 🛠️
Wir arbeiten in weiter wie in Kapitel 1 (rechts). Unser Spiel hat noch zwei Macken, die wir jetzt beheben:
- Man kann in ein bereits belegtes Feld klicken und es überschreiben.
- Der Zug wird nie automatisch an den nächsten Spieler übergeben.
Spielzüge validieren — INVALID_MOVE
Ein Move kann dem Framework mitteilen, dass er ungültig ist, indem er die
spezielle Konstante INVALID_MOVE zurückgibt. boardgame.io verwirft den Zug
dann komplett — G bleibt unverändert.
INVALID_MOVE kommt aus boardgame.io und wird oben in der Datei importiert (die
import-Zeile ist beim Wechsel in dieses Kapitel automatisch dazugekommen):
import { INVALID_MOVE } from 'boardgame.io/core';
Für clickCell heißt das: Bevor wir die Markierung setzen, prüfen wir, ob das
Feld schon belegt ist (also nicht null). Wenn ja, geben wir INVALID_MOVE zurück
und setzen nichts.
👉 Deine Aufgabe: Ergänze clickCell — gib vor dem Setzen der Markierung
INVALID_MOVE zurück, wenn move.G.cells[cellIndex] nicht null ist.
Züge verwalten — das turn-Objekt
Bisher mussten wir im Debug Panel von Hand auf endTurn klicken. In Tic-Tac-Toe
soll der Zug aber immer enden, sobald ein Move gemacht wurde. Dafür gibt es das
turn-Objekt:
minMoves: 1— ein Spieler muss einen Move machen (kann nicht einfachendTurnaufrufen).maxMoves: 1— der Zug endet automatisch nach einem Move.
turn: {
minMoves: 1,
maxMoves: 1,
},
👉 Deine Aufgabe: In deiner Datei ist ein leeres turn-Objekt dazugekommen.
Trag dort minMoves: 1 und maxMoves: 1 ein.
💡 Es gibt in boardgame.io noch viele weitere Möglichkeiten, Züge zu steuern — etwa die Zugreihenfolge, Phasen und Ereignisse. Für Tic-Tac-Toe reichen uns
minMovesundmaxMoves.
Übung 🎯
Die Auswertung (in der Spiel-Sektion) prüft beide Verbesserungen:
- Ein Klick auf ein belegtes Feld wird abgelehnt (
INVALID_MOVE). - Nach einem Zug ist automatisch der nächste Spieler dran (
turn).
Geschafft! 🚀
Neu in diesem Kapitel:
INVALID_MOVE— ein Move erklärt sich selbst für ungültig;Gbleibt unverändert.turn: { minMoves, maxMoves }— steuert die Züge und beendet sie automatisch.
Trotzdem endet unser Spiel noch nie — selbst bei drei in einer Reihe läuft es weiter. Das ist das nächste (und kniffligste) Kapitel.