import os import random import sqlite3 import time from flask import Flask, redirect, request, session app = Flask(__name__) app.secret_key = "escape-room-secret" BASE_DIR = os.path.dirname(os.path.abspath(__file__)) DB_PATH = os.path.join(BASE_DIR, "adventure.db") def get_db(): db = sqlite3.connect(DB_PATH) db.row_factory = sqlite3.Row return db def get_highscores(limit=10): db = get_db() rows = db.execute( """ SELECT name, fertig_zeit - start_zeit AS dauer FROM spieler WHERE fertig_zeit IS NOT NULL ORDER BY dauer LIMIT ? """, (limit,), ).fetchall() db.close() return rows def get_story_html(room, exits): mood = random.choice( [ "Die Luft ist kalt, als würde das Verlies selbst atmen.", "Ein feiner Staubschleier tanzt im Licht, als wolle er dir etwas zeigen.", "Ein leises Knarren erfüllt den Raum, als hätte die Dunkelheit ein Auge geöffnet.", ] ) hint = random.choice( [ "Irgendwo in der Finsternis liegt ein Hinweis auf den nächsten Schritt.", "Der Weg zum Ziel ist nicht immer der einfachste, aber er ist der richtige.", "Jede Ecke scheint ein kleines Geheimnis zu verbergen.", ] ) goal = random.choice( [ "Dein Ziel ist klar: den Schatz zu finden, bevor die Tür sich wieder schließt.", "Mit jedem Schritt näherst du dich dem letzten Geheimnis.", "Ein letzter Atemzug, und der Weg wäre frei.", ] ) directions = [exit_row["richtung"] for exit_row in exits] falltuer = random.choice(directions) if directions else None html = "
" + room["beschreibung"] + "
" html += "" + mood + " " + hint + " " + goal + "
" if falltuer: html += "Im Schatten des Raums scheint ein möglicher Weg nach " + falltuer + " zu führen — vielleicht ist das die Falltür.
" return html @app.route("/", methods=["GET", "POST"]) @app.route("/app", methods=["GET", "POST"]) @app.route("/app/", methods=["GET", "POST"]) def start(): if request.method == "POST" and "spielername" in request.form: name = request.form.get("spielername", "").strip() or "Unbekannt" db = get_db() cur = db.execute( "INSERT INTO spieler (name, start_zeit, fertig_zeit) VALUES (?, ?, NULL)", (name, time.time()), ) db.commit() db.close() session["player_id"] = cur.lastrowid session["player_name"] = name return redirect("/app/?room=1") room_id = request.args.get("room", type=int) player_id = session.get("player_id") if room_id is None or player_id is None: html = "Willkommen zurück, " + session.get("player_name", "Spieler") + ".
" else: html += "Bitte gib zuerst deinen Namen ein, bevor du ins Verlies gehst.
" html += "" html += "" html += "Du hast den Schatz gefunden.
" return 'Leider falsch. nochmal' html = get_story_html(r, ausgaenge) html += '' return html html = get_story_html(r, ausgaenge) for a in ausgaenge: html += '' + a["richtung"] + ' ' return html @app.route("/highscore") def highscore(): html = "