From c58d1141daf62fc230172cd99cc3b841a60d747d Mon Sep 17 00:00:00 2001 From: adrian Date: Wed, 10 Dec 2025 21:40:30 +0100 Subject: [PATCH] game function complete --- backend.js | 131 +++++++++++++++++++++++++++---------------------- game/game.html | 3 ++ game/game.js | 28 ++++++++++- game/style.css | 22 +++++++++ imposter.db | Bin 24576 -> 28672 bytes 5 files changed, 124 insertions(+), 60 deletions(-) diff --git a/backend.js b/backend.js index 2343356..d8753b4 100644 --- a/backend.js +++ b/backend.js @@ -14,57 +14,7 @@ app.use(express.static(join(__dirname, "session"))); const db = new sqlite3.Database("imposter.db"); -//datenbank inizalisierung -app.get("/:sessionId/:username", (req, res) => { - const { sessionId, username } = req.params; - - db.serialize(() => { - db.run(`CREATE TABLE IF NOT EXISTS "${sessionId}" ( - id INTEGER PRIMARY KEY AUTOINCREMENT, - user TEXT , - ready BOOL, - state BOOL - )`); - - db.run(`CREATE TABLE IF NOT EXISTS sessionState ( - sessionId TEXT PRIMARY KEY, - state BOOL - )`); - db.run( - `INSERT OR IGNORE INTO sessionState (sessionId, state) VALUES (?,?)`, - [sessionId, 0], - ); - - db.get( - `SELECT id FROM "${sessionId}" WHERE user = ?`, - [username], - (err, rows) => { - if (err) { - console.error(err); - } - if (rows) { - console.log("user exists"); - } else { - db.run( - `INSERT OR IGNORE INTO "${sessionId}" (user, ready, state) VALUES (?, ?, ?)`, - [username, 0, 0], - ); - } - }, - ); - }); - - //beim neuladen der seite ready auf false setzen - db.run(`UPDATE "${sessionId}" SET ready = false WHERE user = ?`, [username]); - res.sendFile(join(__dirname, "session", "session.html")); -}); - -app.get("/:sessionId/:username/game", (req, res) => { - const { sessionId, username } = req.params; - - res.sendFile(join(__dirname, "game", "game.html")); -}); - +// --- API- und andere spezifische Routes (bleiben oben) --- app.get("/api/:sessionId/:username/createImposter", (req, res) => { const { sessionId, username } = req.params; @@ -76,6 +26,7 @@ app.get("/api/:sessionId/:username/createImposter", (req, res) => { } console.log(row.length); createImposter(sessionId, row.length); + res.status(200).send("ok"); }); }); @@ -124,12 +75,13 @@ app.put(`/api/words/add`, (req, res) => { db.run(`CREATE TABLE IF NOT EXISTS words ( id INTEGER PRIMARY KEY AUTOINCREMENT, word TEXT NOT NULL, - imposterWord TEXT NOT NULL + imposterWord TEXT NOT NULL, + inUse BOOL )`); db.run( - `INSERT INTO words (word, imposterWord) VALUES (?, ?)`, - [payload.word, payload.imposterWord], + `INSERT INTO words (word, imposterWord, inUse) VALUES (?, ?, ?)`, + [payload.word, payload.imposterWord, 0], function (err) { if (err) { console.error("inserted words error:", err); @@ -141,7 +93,6 @@ app.put(`/api/words/add`, (req, res) => { }); }); -//ready status updaten app.put("/api/ready/:sessionId", (req, res) => { const { sessionId } = req.params; const payload = req.body; @@ -171,11 +122,73 @@ app.put("/api/ready/:sessionId", (req, res) => { ); }); -app.get("/api/:sessionId/:username/state", (req, res) => { - const { sessionId, username } = req.params; - const payload = req.body; +app.get("/api/getWords", (req, res) => { + db.get(`SELECT word, imposterWord FROM words WHERE inUse = 1`, + (err, rows) => { + if (err) { + console.log(err); + } + if (rows) { + res.status(200).json(rows); + } else { + db.run(`UPDATE words SET inUse = 1 WHERE id = (SELECT id FROM words ORDER BY RANDOM() LIMIT 1)`) + res.status(201).json({update: true}); + console.log("update") + } + } + ); + +}); - db.get(); + +app.get("/:sessionId/:username/game", (req, res) => { + res.sendFile(join(__dirname, "game", "game.html")); +}); + + +app.get("/:sessionId/:username", (req, res) => { + const { sessionId, username } = req.params; + + db.serialize(() => { + db.run(`CREATE TABLE IF NOT EXISTS "${sessionId}" ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + user TEXT , + ready BOOL, + state BOOL + )`); + + db.run(`CREATE TABLE IF NOT EXISTS sessionState ( + sessionId TEXT PRIMARY KEY, + state BOOL + )`); + db.run( + `INSERT OR IGNORE INTO sessionState (sessionId, state) VALUES (?,?)`, + [sessionId, 0], + ); + + db.get( + `SELECT id FROM "${sessionId}" WHERE user = ?`, + [username], + (err, rows) => { + if (err) { + console.error(err); + } + if (rows) { + console.log("user exists"); + } else { + db.run( + `INSERT OR IGNORE INTO "${sessionId}" (user, ready, state) VALUES (?, ?, ?)`, + [username, 0, 0], + ); + } + }, + ); + }); + + //beim neuladen der seite ready auf false setzen + db.run(`UPDATE "${sessionId}" SET ready = false WHERE user = ?`, [username], () => { + res.sendFile(join(__dirname, "session", "session.html")); + }); }); app.listen(3000, () => { diff --git a/game/game.html b/game/game.html index 6dcd5c8..169197c 100644 --- a/game/game.html +++ b/game/game.html @@ -8,6 +8,9 @@ game +
+
+ \ No newline at end of file diff --git a/game/game.js b/game/game.js index 6c855ca..2480033 100644 --- a/game/game.js +++ b/game/game.js @@ -18,14 +18,40 @@ async function show_user() { } } +const imposterStatus = getImposter(); + async function getImposter() { const res = await fetch(`/api/${sessionId}/${username}/getImposter`); const stateObj = await res.json(); state = stateObj.state; - + const ImposterStateDiv = document.getElementById('imposterState'); + if (state == 1) { console.log("du bist imposter"); + ImposterStateDiv.textContent = 'Du bist der Imposter!' + return true } else { console.log("du bist kein imposter"); + ImposterStateDiv.textContent = 'Du bist kein Imposter!' + return false } } + +getWords(imposterStatus) + +async function getWords(imposterStatus) { + const res = await fetch(`/api/getWords`); + const words = await res.json(); + console.log(words); + const WordDiv = document.getElementById('word'); + if (res.status == 201){ + getWords(); + } else if (imposterStatus) { + console.log(words.imposterWord) + WordDiv.textContent = "dein tip:" + words.imposterWord; + }else if (!imposterStatus){ + console.log(words.word) + WordDiv.textContent = "dein wort:" + words.word; + } + +} \ No newline at end of file diff --git a/game/style.css b/game/style.css index c5de623..488529f 100644 --- a/game/style.css +++ b/game/style.css @@ -1,3 +1,25 @@ body { background-color: #09161e; } +.imposterState{ + display: flex; + justify-content: center; + background-color: white; + border-radius: 5px; + border-width: 4px; + max-width: fit-content; + margin: 5px auto; + font-size: 30px; + +} +.word { + display: flex; + justify-content: center; + background-color: white; + border-radius: 5px; + border-width: 4px; + max-width: fit-content; + margin: 5px auto; + font-size: 30px; + +} \ No newline at end of file diff --git a/imposter.db b/imposter.db index ca16ff81163d46ccf9de009a88bbf5b9c76a7919..91022d6db13fd09d0be45a9d1e3bed33a7100a5e 100644 GIT binary patch delta 348 zcmZoTz}WDBae}m<69WSSI}pPF$3z`tNhb!q-k-eu!VGM@(hU5${L*}}e7AVl@k(!O zT+E~1D8R-pE-cL0#9oq^l#`lRkO@R=&Oxq@A+8D`j!r(V3Q9nc$sc)hbQ*P7*~P`h z8Jo<(YRmJBQi{O@JBoU+(B!H7rVb#MLWpZbh=QL#5QqBs=x`~3L1u12esM`^Q8;cD zd7;Id{rR>Fa=c;S|IYu0|H)=SfouH29L&t(oIry)nV7{H!B#PE{;tofz`-B@_BQ)w zL5KVN69ZT#zmFH>;{}Q_^IvA*f6ITL|1!{oqx`yD%&ZK8!W;$pK*+