first commit
This commit is contained in:
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user