# 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) - [x] Projektstruktur aufsetzen (`Cargo.toml`; Modul-Struktur `core`/`audio` bereinigt und verdrahtet). - [x] **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. - [x] **Audio-Grundlagen**: `audio::tts` ruft die Web Speech API korrekt an (`SpeechSynthesisUtterance`); auf nativen Targets Dummy-Ausgabe für Tests. - [x] 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-`Event`s). **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 - [x] **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"). - [x] **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. - [x] **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.