from flask import Flask, request, session from html import escape import sqlite3 import time app = Flask(__name__) app.secret_key = "stadion-escape-secret" STYLE = """ """ def get_db(): db = sqlite3.connect("adventure.db") db.row_factory = sqlite3.Row return db def highscore_html(db): eintraege = db.execute( """ SELECT name, fertig_zeit - start_zeit AS dauer FROM spieler WHERE fertig_zeit IS NOT NULL ORDER BY dauer LIMIT 10 """ ).fetchall() if not eintraege: return "" html = "

Highscore

    " for eintrag in eintraege: html += "
  1. " + escape(eintrag["name"]) + " - " + str(round(eintrag["dauer"], 1)) + " Sekunden
  2. " html += "
" return html @app.route("/", methods=["GET", "POST"]) @app.route("/app/", methods=["GET", "POST"]) def start(): if request.method == "POST": name = request.form["name"].strip() if not name: name = "Unbekannter Fan" db = get_db() cursor = db.execute( "INSERT INTO spieler (name, start_zeit, fertig_zeit) VALUES (?, ?, NULL)", (name, time.time()), ) spieler_id = cursor.lastrowid db.commit() db.close() session["spieler_id"] = spieler_id session["spieler_name"] = name return STYLE + ( "

Eintrittskarte gelöst

" "

Willkommen, " + escape(name) + ". Dein Weg durchs Stadion beginnt.

" 'Zum Stadiontor' ) return STYLE + ( "

Stadion Escape

" "

Trage deinen Namen auf der Eintrittskarte ein. Ab dann läuft deine Zeit.

" '
' '' "" "
" ) @app.route("/raum/", methods=["GET", "POST"]) @app.route("/app/raum/", methods=["GET", "POST"]) def raum(raum_id): db = get_db() r = db.execute("SELECT * FROM raeume WHERE id=?", (raum_id,)).fetchone() if r is None: db.close() return STYLE + '

Raum nicht gefunden

Zurück zum Start', 404 if r["raetsel_frage"]: if request.method == "POST": antwort = request.form["antwort"].strip().lower() richtige_antwort = r["raetsel_antwort"].strip().lower() db.close() if antwort == richtige_antwort: db = get_db() spieler_id = session.get("spieler_id") if spieler_id: db.execute( "UPDATE spieler SET fertig_zeit=? WHERE id=? AND fertig_zeit IS NULL", (time.time(), spieler_id), ) db.commit() html = ( "

Geschafft!

" "

Die Nordkurve feiert mit dir, " + escape(session.get("spieler_name", "Fan")) + ".

" ) html += highscore_html(db) db.close() return STYLE + html return STYLE + ( '

Leider falsch

' '

Erwin schüttelt den Kopf. Die Botschaft stimmt noch nicht.

' 'Nochmal versuchen' ) html = "

" + r["name"] + "

" html += "

" + r["beschreibung"] + "

" html += '
' html += "

" + r["raetsel_frage"] + "

" html += '' html += "" html += "
" db.close() return STYLE + html ausgaenge = db.execute( "SELECT richtung, nach_raum FROM ausgaenge WHERE von_raum=?", (raum_id,), ).fetchall() db.close() html = "

" + r["name"] + "

" html += "

" + r["beschreibung"] + "

" for a in ausgaenge: html += '' html += a["richtung"] html += " " return STYLE + html if __name__ == "__main__": app.run(host="0.0.0.0", port=9000)