diff --git a/app/app.py b/app/app.py index da82fe1..1583520 100644 --- a/app/app.py +++ b/app/app.py @@ -1,5 +1,6 @@ from flask import Flask, request, session, redirect import sqlite3 +from datetime import datetime app = Flask(__name__) app.secret_key = "sneaky-snakes-snacken-snacks" @@ -46,7 +47,7 @@ def layout(content): }} .card {{ - width: min(720px, 100%); + width: min(840px, 100%); background: var(--card); border: 1px solid var(--border); border-radius: 22px; @@ -120,6 +121,21 @@ def layout(content): .exits {{ margin-top: 1rem; }} + + .highscore {{ + margin-top: 1.5rem; + padding-top: 1rem; + border-top: 1px solid rgba(148, 163, 184, 0.15); + }} + + ol {{ + margin: 0.5rem 0 0; + padding-left: 1.3rem; + }} + + li {{ + margin: 0.35rem 0; + }}
{content} @@ -127,119 +143,45 @@ def layout(content): """ +def ensure_columns(): + db = get_db() + db.execute(""" + CREATE TABLE IF NOT EXISTS highscore ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + spieler TEXT NOT NULL, + sekunden REAL NOT NULL, + gewonnen_am TEXT NOT NULL + ) + """) + try: + db.execute("ALTER TABLE spielstand ADD COLUMN startzeit TEXT") + except sqlite3.OperationalError: + pass + try: + db.execute("ALTER TABLE spielstand ADD COLUMN fertig INTEGER DEFAULT 0") + except sqlite3.OperationalError: + pass + db.commit() + db.close() + + +ensure_columns() + + @app.route("/", methods=["GET", "POST"]) def start(): if request.method == "POST": name = request.form["name"].strip() if name != "": session["spieler"] = name + session["startzeit"] = datetime.utcnow().isoformat() + db = get_db() - db.execute( - "INSERT OR IGNORE INTO spielstand (spieler, raum_id) VALUES (?, 1)", + row = db.execute( + "SELECT spieler FROM spielstand WHERE spieler=?", (name,) - ) - db.commit() - db.close() - return redirect("/app/raum/1") + ).fetchone() - db = get_db() - anzahl = db.execute("SELECT COUNT(*) AS n FROM spielstand").fetchone()["n"] - - html = "

Verlies

" - html += f"

{anzahl} Abenteurer waren schon hier.

" - - if "spieler" in session: - s = db.execute( - "SELECT raum_id FROM spielstand WHERE spieler=?", - (session["spieler"],) - ).fetchone() - if s: - html += f"

Willkommen zurück, {session['spieler']}!

" - html += f'Weiterspielen' - html += 'Neues Abenteuer' - - db.close() - - html += """ -
-
- -
- -
- """ - return layout(html) - - -@app.route("/raum/", 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"]: - db.close() - return layout(""" -

Du findest einen geilen Schatz

-

Herzlichen Glückwunsch. Du hast das Verlies überlebt.

- Zurück zum Anfang - """) - db.close() - return layout(f""" -

Leider falsch

-

Die Antwort war nicht richtig.

- Nochmal - """) - - db.close() - return layout(f""" -

{r["name"]}

-

{r["beschreibung"]}

-
-
- -
- -
- """) - - 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["richtung"]}' - - spieler_html = "" - if "spieler" in session: - spieler_html = f'

Unterwegs als: {session["spieler"]}

' - - html = f""" -

{r["name"]}

-

{r["beschreibung"]}

- {spieler_html} -
{exits_html}
- """ - return layout(html) - - -@app.route("/reset") -def reset(): - session.pop("spieler", None) - return redirect("/app/") - - -if __name__ == "__main__": - app.run(host="0.0.0.0", port=9008) \ No newline at end of file + if row: + db.execute( + "UPDATE \ No newline at end of file