game function complete
This commit is contained in:
131
backend.js
131
backend.js
@ -14,57 +14,7 @@ app.use(express.static(join(__dirname, "session")));
|
|||||||
|
|
||||||
const db = new sqlite3.Database("imposter.db");
|
const db = new sqlite3.Database("imposter.db");
|
||||||
|
|
||||||
//datenbank inizalisierung
|
// --- API- und andere spezifische Routes (bleiben oben) ---
|
||||||
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"));
|
|
||||||
});
|
|
||||||
|
|
||||||
app.get("/api/:sessionId/:username/createImposter", (req, res) => {
|
app.get("/api/:sessionId/:username/createImposter", (req, res) => {
|
||||||
const { sessionId, username } = req.params;
|
const { sessionId, username } = req.params;
|
||||||
|
|
||||||
@ -76,6 +26,7 @@ app.get("/api/:sessionId/:username/createImposter", (req, res) => {
|
|||||||
}
|
}
|
||||||
console.log(row.length);
|
console.log(row.length);
|
||||||
createImposter(sessionId, 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 (
|
db.run(`CREATE TABLE IF NOT EXISTS words (
|
||||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||||
word TEXT NOT NULL,
|
word TEXT NOT NULL,
|
||||||
imposterWord TEXT NOT NULL
|
imposterWord TEXT NOT NULL,
|
||||||
|
inUse BOOL
|
||||||
)`);
|
)`);
|
||||||
|
|
||||||
db.run(
|
db.run(
|
||||||
`INSERT INTO words (word, imposterWord) VALUES (?, ?)`,
|
`INSERT INTO words (word, imposterWord, inUse) VALUES (?, ?, ?)`,
|
||||||
[payload.word, payload.imposterWord],
|
[payload.word, payload.imposterWord, 0],
|
||||||
function (err) {
|
function (err) {
|
||||||
if (err) {
|
if (err) {
|
||||||
console.error("inserted words error:", 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) => {
|
app.put("/api/ready/:sessionId", (req, res) => {
|
||||||
const { sessionId } = req.params;
|
const { sessionId } = req.params;
|
||||||
const payload = req.body;
|
const payload = req.body;
|
||||||
@ -171,11 +122,73 @@ app.put("/api/ready/:sessionId", (req, res) => {
|
|||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
app.get("/api/:sessionId/:username/state", (req, res) => {
|
app.get("/api/getWords", (req, res) => {
|
||||||
const { sessionId, username } = req.params;
|
db.get(`SELECT word, imposterWord FROM words WHERE inUse = 1`,
|
||||||
const payload = req.body;
|
(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, () => {
|
app.listen(3000, () => {
|
||||||
|
|||||||
@ -8,6 +8,9 @@
|
|||||||
<title>game</title>
|
<title>game</title>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
|
<div id="imposterState" class="imposterState"></div>
|
||||||
|
<div id="word" class="word"></div>
|
||||||
|
|
||||||
<script src="./game.js" ></script>
|
<script src="./game.js" ></script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
26
game/game.js
26
game/game.js
@ -18,14 +18,40 @@ async function show_user() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const imposterStatus = getImposter();
|
||||||
|
|
||||||
async function getImposter() {
|
async function getImposter() {
|
||||||
const res = await fetch(`/api/${sessionId}/${username}/getImposter`);
|
const res = await fetch(`/api/${sessionId}/${username}/getImposter`);
|
||||||
const stateObj = await res.json();
|
const stateObj = await res.json();
|
||||||
state = stateObj.state;
|
state = stateObj.state;
|
||||||
|
const ImposterStateDiv = document.getElementById('imposterState');
|
||||||
|
|
||||||
if (state == 1) {
|
if (state == 1) {
|
||||||
console.log("du bist imposter");
|
console.log("du bist imposter");
|
||||||
|
ImposterStateDiv.textContent = 'Du bist der Imposter!'
|
||||||
|
return true
|
||||||
} else {
|
} else {
|
||||||
console.log("du bist kein imposter");
|
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;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@ -1,3 +1,25 @@
|
|||||||
body {
|
body {
|
||||||
background-color: #09161e;
|
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;
|
||||||
|
|
||||||
|
}
|
||||||
BIN
imposter.db
BIN
imposter.db
Binary file not shown.
Reference in New Issue
Block a user