TemplateGameLogic

TemplateGameLogic

Beispiel-Template für ein einfaches Spiel (z.B. NIM oder Bauernschach).

WICHTIG:

  1. Ersetze "TemplateGame" mit deinem Spiel-Namen (z.B. "NIMGame", "BauernschachLogic")
  2. Implementiere ALLE Methoden mit ✅
  3. Optionale Methoden mit ⭐ sind nur nötig, wenn SearchEngine verwendet wird
  4. Testes gründlich mit Arena und Minimax!

Constructor

new TemplateGameLogic()

Description:
  • ✅ ERFORDERLICH: Konstruktor Initialisiert das Spiel in den Startzustand.

Source:

Methods

_checkGameEnd()

Description:
  • Hilfsfunktion: Prüfe auf Spielende. Wird nach jedem Zug aufgerufen. Setzt: this.winner, this.isGameOver

Source:

_isMoveInList(move, validMoves) → {boolean}

Description:
  • Hilfsfunktion: Prüft, ob ein Zug in der Züge-Liste enthalten ist. Wird für Validierung benötigt.

Source:
Parameters:
Name Type Description
move number | Object
validMoves Array
Returns:
Type
boolean

clone() → {TemplateGameLogic}

Description:
  • ✅ ERFORDERLICH: clone()

    Erstellt eine TIEFE KOPIE des aktuellen Zustands. Dies ist essentiell für die KI (Minimax, Suchbäume): Die KI simuliert Züge, ohne das echte Spiel zu beeinflussen.

    WICHTIG: Kopiere ALLE Eigenschaften, nicht nur primitive Daten!

Source:
Returns:

Exakte Kopie dieses Zustands

Type
TemplateGameLogic

getAllValidMoves() → {Array.<(number|Object)>}

Description:
  • ✅ ERFORDERLICH: getAllValidMoves()

    Liefert ALLE legalen Züge für den aktuellen Spieler. Diese Methode ist kritisch für die KI - sie muss korrekt und vollständig sein.

Source:
Examples
// Einfaches Format: nur Zahlen
return [0, 1, 2, 3];  // Für RotateBox oder TTT
// Komplexes Format: Objekte
return [
    {pile: 0, count: 1},
    {pile: 0, count: 2},
    {pile: 1, count: 1},
    // ... mehr Züge
];
Returns:

Array von möglichen Zügen

Type
Array.<(number|Object)>

getNextStates() → {Array.<{move: (number|Object), state: GameState}>}

Description:
  • ⭐ OPTIONAL: getNextStates()

    Wird nur benötigt, wenn du SearchEngine nutzt. Liefert ALLE möglichen Nachfolgezustände.

Source:
Returns:
Type
Array.<{move: (number|Object), state: GameState}>

getStateKey() → {string}

Description:
  • ✅ ERFORDERLICH: getStateKey()

    Generiert einen EINDEUTIGEN String für diesen Spielzustand. Wird verwendet für:

    • Duplikaterkennung im Suchbaum
    • Transposition Tables (Caching in Minimax)
    • Zustands-Hashing

    WICHTIG:

    • Gleiche Zustände → gleiche Keys
    • Unterschiedliche Zustände → unterschiedliche Keys
    • JSON.stringify() ist oft die einfachste Lösung
Source:
Returns:

Eindeutiger Hash für diesen Zustand

Type
string

isGoal() → {boolean}

Description:
  • ⭐ OPTIONAL: isGoal()

    Wird nur benötigt, wenn du SearchEngine für Puzzle-Spiele nutzt. Prüft, ob ein ZIELZUSTAND erreicht ist (z.B. für RotateBox).

    NICHT benötigt für:

    • Normale Spiele mit zwei Spielern (nutze stattdessen winner)
    • Wenn du diese Methode nicht brauchst, lass einfach die Fehler-Exception
Source:
Returns:

true wenn Ziel erreicht

Type
boolean

makeMove(move) → {boolean}

Description:
  • ✅ ERFORDERLICH: makeMove(move)

    Führt einen Zug AUS und aktualisiert den Zustand. Dies ist die "Mutation-Funktion" des Spiels.

    WICHTIG:

    • Ändere den INTERNEN Zustand
    • Aktualisiere this.winner, this.isGameOver
    • Wechsle this.currentPlayer
    • Gib TRUE zurück, wenn gültig; FALSE wenn ungültig
Source:
Parameters:
Name Type Description
move number | Object

Der Zug (Format wie in getAllValidMoves)

Returns:

true wenn erfolgreich, false wenn ungültig

Type
boolean