fehler behoben

This commit is contained in:
ElenaRJ 2026-07-15 17:15:04 +02:00
parent 0a7686ef2f
commit 0f6bd13e57

View file

@ -184,4 +184,165 @@ def start():
if row: if row:
db.execute( db.execute(
"UPDATE "UPDATE spielstand SET raum_id=1, startzeit=?, fertig=0 WHERE spieler=?",
(session["startzeit"], name)
)
else:
db.execute(
"INSERT INTO spielstand (spieler, raum_id, startzeit, fertig) VALUES (?, 1, ?, 0)",
(name, session["startzeit"])
)
db.commit()
db.close()
return redirect("/app/raum/1")
db = get_db()
anzahl = db.execute("SELECT COUNT(*) AS n FROM spielstand").fetchone()["n"]
highscores = db.execute(
"SELECT spieler, sekunden, gewonnen_am FROM highscore ORDER BY sekunden ASC, gewonnen_am ASC LIMIT 10"
).fetchall()
db.close()
html = "<h1>Verlies</h1>"
html += f"<p class='muted'>{anzahl} Abenteurer waren schon hier.</p>"
if "spieler" in session:
db = get_db()
s = db.execute(
"SELECT raum_id FROM spielstand WHERE spieler=?",
(session["spieler"],)
).fetchone()
db.close()
if s:
html += f"<p>Willkommen zurück, <strong>{session['spieler']}</strong>!</p>"
html += f'<a href="/app/raum/{s["raum_id"]}">Weiterspielen</a>'
html += '<a class="secondary" href="/app/reset">Neues Abenteuer</a>'
html += """
<form method="post">
<label for="name">Dein Name:</label><br>
<input id="name" name="name" placeholder="Zum Beispiel Mara">
<br>
<button type="submit">Abenteuer starten</button>
</form>
"""
html += "<div class='highscore'><h2>Highscore</h2>"
if highscores:
html += "<ol>"
for hs in highscores:
minuten = int(hs["sekunden"] // 60)
sekunden = int(hs["sekunden"] % 60)
zeit = f"{minuten}m {sekunden}s" if minuten else f"{sekunden}s"
html += f"<li><strong>{hs['spieler']}</strong> — {zeit}</li>"
html += "</ol>"
else:
html += "<p class='muted'>Noch kein Schatz gefunden.</p>"
html += "</div>"
return layout(html)
@app.route("/raum/<int:id>", methods=["GET", "POST"])
def raum(id):
db = get_db()
if "spieler" in session:
db.execute(
"UPDATE spielstand SET raum_id=? WHERE spieler=?",
(id, session["spieler"])
)
db.commit()
r = db.execute("SELECT * FROM raeume WHERE id=?", (id,)).fetchone()
if r["raetsel_frage"]:
if request.method == "POST":
if request.form["antwort"].strip() == r["raetsel_antwort"]:
now = datetime.utcnow()
startzeit_str = session.get("startzeit")
if not startzeit_str:
row = db.execute(
"SELECT startzeit FROM spielstand WHERE spieler=?",
(session["spieler"],)
).fetchone()
startzeit_str = row["startzeit"] if row else None
if startzeit_str and "spieler" in session:
startzeit = datetime.fromisoformat(startzeit_str)
sekunden = (now - startzeit).total_seconds()
bereits = db.execute(
"SELECT 1 FROM highscore WHERE spieler=? AND gewonnen_am=?",
(session["spieler"], now.date().isoformat())
).fetchone()
db.execute(
"INSERT INTO highscore (spieler, sekunden, gewonnen_am) VALUES (?, ?, ?)",
(session["spieler"], sekunden, now.date().isoformat())
)
db.execute(
"UPDATE spielstand SET fertig=1 WHERE spieler=?",
(session["spieler"],)
)
db.commit()
db.close()
return layout("""
<h1>Du findest einen Schatz</h1>
<p>Herzlichen Glückwunsch. Du hast das Verlies überlebt.</p>
<a href="/app/">Zurück zum Anfang</a>
""")
db.close()
return layout(f"""
<h1>Leider falsch</h1>
<p>Die Antwort war nicht richtig.</p>
<a href="/app/raum/{id}">Nochmal</a>
""")
db.close()
return layout(f"""
<h1>{r["name"]}</h1>
<p>{r["beschreibung"]}</p>
<form method="post">
<label for="antwort">{r["raetsel_frage"]}</label><br>
<input id="antwort" name="antwort" placeholder="Antwort eingeben">
<br>
<button type="submit">OK</button>
</form>
""")
ausgaenge = db.execute(
"SELECT richtung, nach_raum FROM ausgaenge WHERE von_raum=?",
(id,)
).fetchall()
db.close()
exits_html = ""
for a in ausgaenge:
exits_html += f'<a href="/app/raum/{a["nach_raum"]}">{a["richtung"]}</a>'
spieler_html = ""
if "spieler" in session:
spieler_html = f'<p class="muted">Unterwegs als: {session["spieler"]}</p>'
html = f"""
<h1>{r["name"]}</h1>
<p>{r["beschreibung"]}</p>
{spieler_html}
<div class="exits">{exits_html}</div>
"""
return layout(html)
@app.route("/reset")
def reset():
session.pop("spieler", None)
session.pop("startzeit", None)
return redirect("/app/")
if __name__ == "__main__":
app.run(host="0.0.0.0", port=9008)