Ein blitzschnelles Echtzeit-Backend für das Kartenspiel Matatu, geschrieben in Go (Golang). Es nutzt WebSockets für latenzfreies Gameplay und bietet eine vollständige Spiel-Lobby, Auto-Reconnects und eine strikte, serverseitige Validierung der Spielregeln.
Dieses Repository enthält ausschließlich den Server. Das dazugehörige React/Vite-Frontend kommuniziert über eine REST-API (für die Lobby) und über WebSockets (für das Live-Spiel) mit diesem Backend.
- Echtzeit-Kommunikation: Nahtloses Gameplay über WebSockets (gorilla/websocket).
- Komplexe Spielregeln (Server-Authoritative): Alle Züge, Strafen, Aussetzen (8er) und Richtungswechsel (Buben) werden vom Server berechnet und validiert, um Cheating zu verhindern.
- Sonderaktionen: "Tatu" rufen bei 2 Karten, Strafen verteilen, Ass-Farbe wünschen.
- Auto-Reconnect: Toleriert Verbindungsabbrüche (z. B. bei Smartphone-Standby oder Netzwechsel) und synchronisiert Spieler nach einem Reconnect automatisch.
- Lobby-System: Erstellen von Räumen und Auflisten offener Spiele ("Server Browser").
- Auto-Cleanup: Abgeschlossene oder verwaiste Spiele (nach 2 Stunden Inaktivität) werden von einem Scheduler automatisch aus dem Speicher gelöscht.
- Go (Version 1.26 oder neuer)
- Repository klonen:
git clone https://github.com/dein-name/matatu-backend.git
cd matatu-backend
- Server starten:
go run .
Der Server läuft nun standardmäßig auf http://localhost:8080.
- GET /api/game/create?playerName={Name}: Erstellt ein neues Spiel und gibt eine zufällige 4-stellige gameId zurück.
- GET /api/game/list: Gibt ein JSON-Array mit allen offenen Spielen (Status: waiting) zurück.
- WS /ws?gameId={ID}&playerId={Name}: Baut die persistente Verbindung zum Hub des jeweiligen Spiels auf.
Das Projekt enthält Unit-Tests, um die Spielmechanik (z. B. den "7er-Startkarten-Fix" oder die Karten-Validierung) deterministisch zu prüfen.
go test -v
Dieses Projekt ist unter der GNU General Public License v3.0 (GPLv3) lizenziert. Siehe die LICENSE-Datei für weitere Details.