Files
audiopoker/PLAN.md
T
2026-07-23 15:40:44 +02:00

3.5 KiB
Raw Blame History

Projektplan: Audiopoker (Bevy + Wasm)

Zielsetzung

Ein barrierefreies Multiplayer-Pokergame für blinde Spieler, das primär über Audio (TTS & SFX) bedient wird. Das Spiel wird via Webbrowser aufgerufen und auf WebAssembly kompiliert.

Technologie-Stack

  • Engine: Bevy (Rust)
  • Target: WebAssembly (Wasm)
  • Networking: WebSockets für die Synchronisation des Spielzustands.
  • Audio-Output: Web Speech API (via JS-Bindings) für Text-to-Speech, bevy_audio für Soundeffekte.
  • Input: Tastatur-zentrierte Steuerung (Tab/Space/Enter).

Modul-Struktur

  • core::logic: Reine Poker-Logik (Deck, Hand-Evaluation, Betting) ohne grafische Abhängigkeiten.
  • core::network: Netzwerkprotokoll und WebSocket-Handhabung für Multiplayer-Synchronisation.
  • audio::tts: Interface zur Web Speech API für dynamisches Sprechen von Spielereignissen.
  • audio::sfx: Sound-Manager für atmosphärische Effekte (Chips, Karten mischen).
  • ui_minimal: Minimalistische Darstellung, optimiert für Barrierefreiheit und geringen Ressourcenverbrauch.

Implementierungsphasen

Phase 1: Fundament & Core Logic (MVP)

  • Projektstruktur aufsetzen (Cargo.toml; Modul-Struktur core/audio bereinigt und verdrahtet).
  • Poker Engine: Hand-Rankings (inkl. Wheel-Straight, 7-Karten-Bestbewertung), Deck-Shuffling/Draw und einfache Betting-Logik (Fold/Check/Call/Raise, All-In) implementiert und getestet.
  • Audio-Grundlagen: audio::tts ruft die Web Speech API korrekt an (SpeechSynthesisUtterance); auf nativen Targets Dummy-Ausgabe für Tests.
  • Bevy-App-Grundgerüst aufgesetzt: AudiopokerPlugin (src/game_plugin.rs) verdrahtet core::game/core::logic und audio über Bevy-Messages (Announce, PlaySfx) mit Startup/Update-Systemen. API-Stand: Bevy 0.19 (Message/MessageWriter/MessageReader/add_message, seit 0.17 getrennt von Observer-Events). Bitte lokal mit cargo check/cargo run verifizieren, da hier kein zu Bevy 0.19 passender Compiler zur Verfügung stand.

Phase 2: Networking & Multiplayer

  • Server-Architektur für Spielräume und Spielerverwaltung aufbauen.
  • Netzwerkprotokoll für Aktionen (Deal, Bet, Fold) definieren.
  • Multiplayer-Lobby und Tischsuche implementieren.

Phase 3: Audio Experience & UI

  • TTS-Logik verfeinert: GameManager::take_action erzeugt kontextuelle Ansagen (Aktion des Spielers, Rundenwechsel inkl. aufgedeckter Community Cards, Showdown-Gewinner mit Hand-Kategorie, "wer ist am Zug"). Karten werden über Card/Suit-Display sprachfreundlich ausgegeben ("König Herz").
  • Soundeffekte eingebunden (Event-Ebene): PlaySfx-Messages für "shuffle", "chip", "fold", "flip" werden an den entsprechenden Stellen ausgelöst und von audio::sfx entgegengenommen. Echte Audiodateien/bevy_audio-Wiedergabe fehlen noch (keine Assets im Projekt) aktuell Log-Ausgabe als Platzhalter.
  • Minimalistische, tastaturzentrierte Steuerung: Tab wählt zwischen Fold/Call-Check/Raise, Leertaste/Enter bestätigt (siehe game_plugin::handle_player_input). Kein grafisches UI nötig, da das Spiel primär auf Audio-Feedback setzt.
  • Mehrspieler-lokal-Testbarkeit über die Konsole hinaus (aktuell nur 2 fest verdrahtete Spieler; echte Steuerung pro Spieler braucht Networking, siehe Phase 2).
  • Neue Hand nach Showdown starten (aktuell stoppt die Eingabe-Verarbeitung nach Round::Showdown).

Phase 4: Polishing & Testing

  • Barrierefreiheits-Audit (Tastatur-Flow ohne Maus).
  • Latenztests im Multiplayer.
  • WebAssembly Deployment Vorbereitung.