Skip to content

Repository files navigation

🃏 Matatu - Multiplayer Card Game (Go Backend)

Go Version License

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.

✨ Features

  • 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.

🚀 Installation & Start

Voraussetzungen

  • Go (Version 1.26 oder neuer)

Lokal ausführen

  1. Repository klonen:
git clone https://github.com/dein-name/matatu-backend.git
cd matatu-backend
  1. Server starten:
go run .

Der Server läuft nun standardmäßig auf http://localhost:8080.

📡 API Endpunkte

HTTP (REST)

  • 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.

WebSockets

  • WS /ws?gameId={ID}&playerId={Name}: Baut die persistente Verbindung zum Hub des jeweiligen Spiels auf.

🧪 Tests ausführen

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

📜 Lizenz

Dieses Projekt ist unter der GNU General Public License v3.0 (GPLv3) lizenziert. Siehe die LICENSE-Datei für weitere Details.

About

A matatu backend

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages