first commit

This commit is contained in:
Lucas Roschnowski
2026-08-16 20:50:31 +02:00
parent 69a0e7a9f7
commit c5de95fade
8 changed files with 1748 additions and 1 deletions
+64 -1
View File
@@ -1,2 +1,65 @@
# meyer
# 🎲 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://<server-IP>: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)