game function complete

This commit is contained in:
adrian
2025-12-10 21:40:30 +01:00
parent f8a67c1dfb
commit c58d1141da
5 changed files with 124 additions and 60 deletions

View File

@ -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, () => {

View File

@ -8,6 +8,9 @@
<title>game</title>
</head>
<body>
<div id="imposterState" class="imposterState"></div>
<div id="word" class="word"></div>
<script src="./game.js" ></script>
</body>
</html>

View File

@ -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;
}
}

View File

@ -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;
}

Binary file not shown.