Files
2026-08-16 20:50:31 +02:00

2.8 KiB
Raw Permalink Blame History

🎲 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

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)