Lustige Raumnamen: Generator, Lobby-Anzeige + Würfel-Button
Build & Deploy / deploy (push) Successful in 19s
Build & Deploy / deploy (push) Successful in 19s
- Server: 3 Name-Muster (Adj+Tiere, Wort-Event, Action-im-Ort), rename-Endpunkt (Host, Lobby) - Lobby: Raumname ueber Code, Host kann wuerfeln, Share-Text mit Name
This commit is contained in:
@@ -13,6 +13,8 @@
|
||||
* POST /api/game/room/:code/question -> Fragesteller stellt die Frage
|
||||
* POST /api/game/room/:code/ranking -> eigenes geheimes Ranking abgeben
|
||||
* POST /api/game/room/:code/next -> Auflösung -> Punktestand -> neue Runde
|
||||
* POST /api/game/room/:code/redmode -> Red Mode an/aus (Host, nur Lobby)
|
||||
* POST /api/game/room/:code/rename -> Raumnamen neu würfeln (Host, nur Lobby)
|
||||
*
|
||||
* Auth: X-Player-Token-Header (oder Body-Feld "token"), pro Spieler ein Token.
|
||||
* Start: Sobald ALLE Spieler ready sind (min. 3), wechselt der Raum automatisch
|
||||
@@ -116,6 +118,49 @@ function neuerCode() {
|
||||
return null;
|
||||
}
|
||||
|
||||
/* ── Lustige Raumnamen ──────────────────────────────────── */
|
||||
const NAMEN = {
|
||||
adj: [
|
||||
'durstigen', 'tanzenden', 'kichernden', 'brüllenden', 'flüsternden', 'glühenden',
|
||||
'schunkelnden', 'zappelnden', 'grölenden', 'funkelnden', 'randalierenden', 'frechen',
|
||||
'mutigen', 'verpeilten', 'torkelnden', 'jauchzenden', 'grinsenden', 'schwatzenden',
|
||||
'pfeifenden', 'trommelnden', 'hopsenden', 'sabbernden', 'schleimigen', 'schillernden',
|
||||
'tollpatschigen', 'unersättlichen', 'übermütigen', 'schäumenden', 'quietschenden',
|
||||
'polternden', 'strahlenden', 'müden',
|
||||
],
|
||||
tier: [
|
||||
'Piraten', 'Kartoffeln', 'Nachteulen', 'Chamäleons', 'Pinguine', 'Flamingos',
|
||||
'Rentiere', 'Einhörner', 'Gurken', 'Muffins', 'Kekse', 'Bananen', 'Tomaten',
|
||||
'Schildkröten', 'Waschbären', 'Faultiere', 'Kängurus', 'Seehunde', 'Wombats',
|
||||
'Lemminge', 'Spechte', 'Otter', 'Marder', 'Igel', 'Kamele', 'Lamas', 'Alpakas',
|
||||
'Zebras', 'Quokkas', 'Tukane', 'Kronkorken', 'Glühbirnen', 'Staubsauger', 'Kaugummis',
|
||||
'Regenwürmer', 'Luftballons', 'Wackelpuddinge', 'Nudeln', 'Schokolinsen', 'Popcorntüten',
|
||||
],
|
||||
sing: [
|
||||
'Pinguin', 'Kartoffel', 'Muffin', 'Einhorn', 'Otter', 'Faultier', 'Kamel', 'Lama',
|
||||
'Wackelpudding', 'Kronkorken', 'Kaugummi', 'Regenwurm', 'Igel', 'Quokka', 'Flamingo',
|
||||
'Waschbär', 'Specht', 'Tomate', 'Banane', 'Keks',
|
||||
],
|
||||
event: ['Alarm', 'Manie', 'Panik', 'Invasion', 'Verschwörung', 'Olympiade', 'Revolution', 'Notstand', 'Expedition', 'Befreiung'],
|
||||
action: ['Party', 'Chaos', 'Krawall', 'Sause', 'Rambazamba', 'Zoff'],
|
||||
ort: ['Keller', 'Garten', 'Palast', 'U-Boot', 'Zirkus', 'All', 'Baumhaus', 'Schloss', 'Dschungel', 'Wolkenkuckucksheim', 'Kiosk', 'Weltraum'],
|
||||
};
|
||||
|
||||
const pick = (liste) => liste[crypto.randomInt(liste.length)];
|
||||
|
||||
function lustigerRaumname() {
|
||||
for (let versuch = 0; versuch < 25; versuch++) {
|
||||
const typ = crypto.randomInt(3);
|
||||
let name;
|
||||
if (typ === 0) name = `Die ${pick(NAMEN.adj)} ${pick(NAMEN.tier)}`;
|
||||
else if (typ === 1) name = `${pick(NAMEN.sing)}-${pick(NAMEN.event)}`;
|
||||
else name = `${pick(NAMEN.action)} im ${pick(NAMEN.ort)}`;
|
||||
const vergeben = Object.values(rooms).some((r) => r.raumname === name);
|
||||
if (!vergeben) return name;
|
||||
}
|
||||
return `Die ${pick(NAMEN.adj)} ${pick(NAMEN.tier)} ${crypto.randomInt(100)}`;
|
||||
}
|
||||
|
||||
function raumFinden(code) {
|
||||
const raum = rooms[(code || '').toUpperCase()];
|
||||
if (!raum) return null;
|
||||
@@ -141,6 +186,7 @@ function oeffentlicherZustand(raum, token) {
|
||||
const alleReady = raum.spieler.length >= MIN_SPIELER && raum.spieler.every((s) => s.ready);
|
||||
return {
|
||||
code: raum.code,
|
||||
raumname: raum.raumname || '',
|
||||
status: raum.status,
|
||||
runde: raum.runde,
|
||||
anzahlRunden: raum.spieler.length,
|
||||
@@ -207,6 +253,7 @@ const server = http.createServer(async (req, res) => {
|
||||
if (!neuerRaumCode) return fehler(res, 500, 'kein Raumcode frei');
|
||||
const raum = {
|
||||
code: neuerRaumCode,
|
||||
raumname: lustigerRaumname(),
|
||||
erstelltAm: Date.now(),
|
||||
aktivitaet: Date.now(),
|
||||
status: 'lobby',
|
||||
@@ -271,6 +318,15 @@ const server = http.createServer(async (req, res) => {
|
||||
return antwort(res, 200, { ok: true, zustand: oeffentlicherZustand(raum, token) });
|
||||
}
|
||||
|
||||
/* Raumnamen neu wuerfeln (nur Host, nur vor Spielstart) */
|
||||
if (req.method === 'POST' && aktion === 'rename') {
|
||||
if (raum.status !== 'lobby') return fehler(res, 409, 'Der Raumname ist nur vor Spielstart aenderbar');
|
||||
if (!spieler.istHost) return fehler(res, 403, 'Nur der Host kann den Raumnamen aendern');
|
||||
raum.raumname = lustigerRaumname();
|
||||
speichern();
|
||||
return antwort(res, 200, { ok: true, zustand: oeffentlicherZustand(raum, token) });
|
||||
}
|
||||
|
||||
/* Frage stellen */
|
||||
if (req.method === 'POST' && aktion === 'question') {
|
||||
if (raum.status !== 'question') return fehler(res, 409, 'Keine Fragephase');
|
||||
|
||||
Reference in New Issue
Block a user