[Feature]: Einführung eines austauschbaren RuleSet-Systems (Match-Logik) #27

Closed
opened 2026-02-13 13:25:05 +00:00 by FlorianReetz · 0 comments
Owner

Motivation

  • Trennung von Board-Zustand und Spielregeln
  • Vorbereitung auf weitere Spielmodi (z.B. echtes Mahjong)
  • Austauschbarkeit der Regeln zur Laufzeit
  • Saubere Architektur: RuleSet bleibt stateless

Ziel

Ein modulares RuleSet-System wird eingeführt, das die Spiellogik (Tile-Matching) vom BoardManagertrennt.
Das RuleSet soll als austauschbare Resource implementiert werden und ausschließlich Match-Logik enthalten.

Das erste konkrete RuleSet ist für Solitaire-Mahjong.

Architektur-Vorgaben

  • RuleSet ist eine Resource
  • RuleSet speichert keinen Zustand
  • RuleSet mutiert keine Tiles
  • RuleSet kennt keine UI
  • RuleSet führt keine Aktionen aus
  • RuleSet beantwortet ausschließlich Logikfragen

Implementierungsschritte

  • Abstrakte Base-Resource RuleSet

  • Konkretes SolitaireRuleSet

  • Integration in GameManager

  • GameManager nutzt RuleSet zur Match-Validierung

  • BoardManager bleibt zuständig für is_tile_free()

  • Unit-Tests für:

    • gleiche Tiles → kein Match
    • beide frei + gleicher Type + gleicher Value → Match
    • einer nicht frei → kein Match
    • FLOWER/SEASON Special-Case
  • Projekt läuft weiterhin ohne Crash über Main Scene

Akzeptanzkriterien

  • Match-Logik ist vollständig aus dem BoardManager entfernt
  • RuleSet kann ausgetauscht werden ohne BoardManager zu ändern
  • Alle Unit-Tests sind grün
  • Keine zyklischen Abhängigkeiten zwischen Systemen

Nicht Bestandteil dieses Issues

  • Punktesystem
  • Game-Over-Erkennung
  • Move-Validierung (ob noch Züge existieren)
  • Animationen oder UI
  • Identity-Injection der Tiles
### Motivation - Trennung von Board-Zustand und Spielregeln - Vorbereitung auf weitere Spielmodi (z.B. echtes Mahjong) - Austauschbarkeit der Regeln zur Laufzeit - Saubere Architektur: RuleSet bleibt stateless ### Ziel Ein modulares RuleSet-System wird eingeführt, das die Spiellogik (Tile-Matching) vom `BoardManager`trennt. Das `RuleSet` soll als austauschbare Resource implementiert werden und ausschließlich Match-Logik enthalten. Das erste konkrete `RuleSet` ist für Solitaire-Mahjong. ### Architektur-Vorgaben - `RuleSet` ist eine Resource - `RuleSet` speichert keinen Zustand - `RuleSet` mutiert keine Tiles - `RuleSet` kennt keine UI - `RuleSet` führt keine Aktionen aus - `RuleSet` beantwortet ausschließlich Logikfragen ### Implementierungsschritte - [x] Abstrakte Base-Resource RuleSet - [x] Konkretes SolitaireRuleSet - [x] Integration in GameManager - [x] GameManager nutzt RuleSet zur Match-Validierung - [x] BoardManager bleibt zuständig für is_tile_free() - [x] Unit-Tests für: - [x] gleiche Tiles → kein Match - [x] beide frei + gleicher Type + gleicher Value → Match - [x] einer nicht frei → kein Match - [x] FLOWER/SEASON Special-Case - [x] Projekt läuft weiterhin ohne Crash über Main Scene ### Akzeptanzkriterien - Match-Logik ist vollständig aus dem BoardManager entfernt - RuleSet kann ausgetauscht werden ohne BoardManager zu ändern - Alle Unit-Tests sind grün - Keine zyklischen Abhängigkeiten zwischen Systemen ### Nicht Bestandteil dieses Issues - Punktesystem - Game-Over-Erkennung - Move-Validierung (ob noch Züge existieren) - Animationen oder UI - Identity-Injection der Tiles
Sign in to join this conversation.
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
Headframe_Studio/MamaMahjong#27
No description provided.