# 🎲 Meyer – drikke terningespil Et komplett multiplayer-Meyer (drikke-terningespil) til browseren, bygget til selskaber hvor alle allerede snakker sammen på voicechat. Ingen npm-pakker – ren Node.js. ## Sådan kører man ```bash node server.js # lytter på port 3000 (PORT=… for anden port) ``` Åbn **http://localhost:3000** (eller http://:3000) i browseren – en pr. spiller. Alle ser samme bord live. ## Spillet 1. Skriv dit navn → gå til lobbyen. 2. Se listen over borde, **sæt dig** ved ét, eller **opret dit eget** (opretter automatisk en robot-spiller, så bordet ikke står tomt, mens folk samler sig). 3. Værten trykker **Start** (min. 2 spillere). 4. Din tur: **Rul** under dine to øller → klik begge øller, så løfter de sig og du kigger → sig hvad du har (⭐) **eller bluf** og sig højere → øllerne sendes videre. 5. Næste spiller kan **trø på dig** eller **løfte øllerne**. - Sandt → de drikker. Bluff → du drikker. 6. Stangen (sidste sagte slag) bliver liggende – spillet klatrer, indtil nogen bustes. 7. Slag er for lavt? **Rul igen** (uden at kigge) og send videre, eller **send videre** uden at sige noget. 8. Taber = ét øje ned. Ved 0 øjne er man **drækket ud**. Sidste ved bordet vinder. 🏆 ### Hierarchy (højest → lavest) Meyer (1+2) > Lille-Meyer (1+3) > Par 6 > Par 5 > Par 4 > Par 3 > Par 2 > Par 1 > 6+5 > 6+4 > 63, 62, 54, 53, 52, 43, 42, 32 ## Funktioner - **Live-sync** via Server-Sent Events (ingen websocket-afhængigheder) - **Lobbyer** med opdateringsstatus (Ventende / Spiller / Fuld, max 4) - **Privat terning**: kun aktive spiller, der har kigget, ser sit slag (serveren sender `myDice` kun i dennes snapshot) - **Robots** der ruller, bluffer, løfter øller og drikker – bordet kan køre, selv mens folk finder sammen på voicechat - **Chat** til bordet (fx "jeg bluffer ikke, edderma…") - **Afkørsel**: fraværende spillere får turen passeret automatisk; genstart = "Spil igen" - Værten kan starte nyt spil; alle øjne nulstilles - Flere tabs samme spiller = samme session (SSE-multiplexing) ## Filstruktur ``` meyer/ ├── server.js # alt: HTTP, SSE, rum, spilleregler, bots (uden afhængigheder) ├── public/ │ ├── index.html # navne-skrærm, lobby, spil, regel-modal │ ├── style.css # mørk brikbar-tema, øller, terninger, animationer │ └── app.js # klient: SSE-sync, rendering, handlinger └── flow.js / smoke.js / endgame.js # API-smoke-tests ``` ## API (POST /api) `create {roomName, addBot}` · `join {roomId}` · `rejoin {roomId, uid}` · `leave` · `start` · `restart` · `roll` · `peek` · `declare {rank}` · `reroll` · `sendForward` · `challenge` · `pass` · `chat {text}` GET: `/api/rooms` · `/api/state?room=…&uid=…` · `/api/events?uid=…` (SSE)