U18: Verzweigtes Verlies mit Richtungslogik – Gänge (links/rechts), richtiger Weg = Themenfragen -> nächste Etage, falscher Weg = Trivia -> Sackgasse -> zurück, Finale = Lord-Business-Frage
This commit is contained in:
parent
f9f532b7b0
commit
ef336090db
2 changed files with 290 additions and 114 deletions
188
app.py
188
app.py
|
|
@ -157,6 +157,12 @@ def adventure_seite(inhalt, akzent="#f59e0b"):
|
|||
border:1px solid #334155; border-radius:10px; padding:12px 18px;
|
||||
margin:6px 8px 0 0; }
|
||||
.ghost-link:hover { background:#0f172a; }
|
||||
.pfade { display:flex; flex-direction:column; gap:14px; margin-top:8px; }
|
||||
.pfad { background:#0f172a; border:1px solid #334155; border-radius:12px;
|
||||
padding:14px 16px; transition:.15s; }
|
||||
.pfad:hover { border-color:ACCENT; transform:translateY(-1px); }
|
||||
.pfad .exit-link { margin:0 0 6px 0; }
|
||||
.pfad-hinweis { display:block; color:#94a3b8; font-size:14px; }
|
||||
.feedback-bad { background:#7f1d1d; border:1px solid #b91c1c; color:#fecaca;
|
||||
border-radius:10px; padding:12px 14px; margin-bottom:16px; font-weight:600; }
|
||||
.win-emoji { font-size:54px; text-align:center; margin-bottom:8px; }
|
||||
|
|
@ -190,8 +196,12 @@ def start():
|
|||
das <strong>Kragle</strong> – und will damit die ganze Welt für immer festkleben.
|
||||
Nur du kannst ihn stoppen! Kämpf dich Etage für Etage nach oben: vorbei an
|
||||
<strong>Haien</strong> 🦈, <strong>Lasern</strong> 🔴 und – natürlich –
|
||||
<strong>Laserhaien</strong> 🦈⚡. Auf jeder Etage prüfen dich die Sicherheitssysteme
|
||||
mit Trivia-Fragen. Nur wer alle knackt, kommt weiter.</p>
|
||||
<strong>Laserhaien</strong> 🦈⚡.</p>
|
||||
<p class="adv-desc">Jede Etage ist ein Gang, der sich gabelt. <strong>Lies die
|
||||
Hinweise genau!</strong> Der <strong>richtige Weg</strong> stellt dir ein paar
|
||||
thematische Fragen und führt direkt eine Etage höher. Der <strong>falsche Weg</strong>
|
||||
endet nach einem Haufen wirrer Trivia in einer <strong>Sackgasse</strong> – dann
|
||||
heißt es: umkehren! Ganz oben wartet die letzte Frage zu Präsident Business.</p>
|
||||
<a href="/app/raum/1" class="exit-link">Abenteuer starten ▶</a>
|
||||
<p class="muted">Lieber quatschen statt einbrechen?
|
||||
<a href="/app/pinnwand">Zu den Kommentaren →</a></p>
|
||||
|
|
@ -216,85 +226,147 @@ def raum(id):
|
|||
'<p class="adv-desc">Da hat sich wohl ein Bauplan verheddert.</p>'
|
||||
'<a href="/app/" class="exit-link">Zurück zum Start</a></div>')
|
||||
|
||||
fragen = db.execute(
|
||||
"SELECT * FROM fragen WHERE raum_id=? ORDER BY id", (id,)
|
||||
).fetchall()
|
||||
typ = r["typ"]
|
||||
|
||||
prog_key = "raum_%d_idx" % id
|
||||
idx = session.get(prog_key, 0)
|
||||
# ═══ Räume mit Fragen: thema (richtig) · sackgasse (falsch) · ziel (Finale) ═══
|
||||
if typ in ("thema", "sackgasse", "ziel"):
|
||||
fragen = db.execute(
|
||||
"SELECT * FROM fragen WHERE raum_id=? ORDER BY id", (id,)
|
||||
).fetchall()
|
||||
prog_key = "raum_%d_idx" % id
|
||||
idx = session.get(prog_key, 0)
|
||||
|
||||
# ── Es sind noch Sicherheitsfragen offen ──
|
||||
if fragen and idx < len(fragen):
|
||||
aktuelle = fragen[idx]
|
||||
feedback = ""
|
||||
if request.method == "POST":
|
||||
gewaehlt = request.form.get("antwort", "").strip()
|
||||
if gewaehlt.lower() == aktuelle["antwort"].strip().lower():
|
||||
session[prog_key] = idx + 1
|
||||
session.modified = True
|
||||
db.close()
|
||||
return redirect("/app/raum/%d" % id)
|
||||
feedback = ('<div class="feedback-bad">🚨 Alarm! Falsche Antwort – '
|
||||
'die Wächter wurden fast auf dich aufmerksam. Versuch es nochmal.</div>')
|
||||
optionen = aktuelle["optionen"].split("|")
|
||||
db.close()
|
||||
# ── Noch offene Fragen → nächste Frage zeigen ──
|
||||
if fragen and idx < len(fragen):
|
||||
aktuelle = fragen[idx]
|
||||
feedback = ""
|
||||
if request.method == "POST":
|
||||
gewaehlt = request.form.get("antwort", "").strip()
|
||||
if gewaehlt.lower() == aktuelle["antwort"].strip().lower():
|
||||
session[prog_key] = idx + 1
|
||||
session.modified = True
|
||||
db.close()
|
||||
return redirect("/app/raum/%d" % id)
|
||||
if typ == "sackgasse":
|
||||
feedback = ('<div class="feedback-bad">❌ Falsch – und der '
|
||||
'Prüf-Automat fragt einfach stur weiter. Nochmal!</div>')
|
||||
else:
|
||||
feedback = ('<div class="feedback-bad">🚨 Alarm! Falsche Antwort – '
|
||||
'die Wächter werden fast auf dich aufmerksam. Nochmal!</div>')
|
||||
optionen = aktuelle["optionen"].split("|")
|
||||
db.close()
|
||||
|
||||
buttons = ""
|
||||
for opt in optionen:
|
||||
buttons += ('<button class="opt-btn" name="antwort" value="%s">%s</button>'
|
||||
% (esc(opt), esc(opt)))
|
||||
inhalt = ("""
|
||||
buttons = ""
|
||||
for opt in optionen:
|
||||
buttons += ('<button class="opt-btn" name="antwort" value="%s">%s</button>'
|
||||
% (esc(opt), esc(opt)))
|
||||
|
||||
if typ == "sackgasse":
|
||||
label = "🚧 Falscher Weg · %s" % esc(r["name"])
|
||||
elif typ == "ziel":
|
||||
label = "🧱 FINALE · %s" % esc(r["name"])
|
||||
else:
|
||||
label = "🔐 Sicherheitsprüfung · %s" % esc(r["name"])
|
||||
|
||||
inhalt = ("""
|
||||
<div class="adv-card">
|
||||
<div class="adv-floor">🔐 Sicherheitsprüfung · %s</div>
|
||||
<div class="adv-floor">%s</div>
|
||||
<h1>%s</h1>
|
||||
<p class="adv-desc">%s</p>
|
||||
<p class="adv-progress">Frage %d von %d</p>
|
||||
%s
|
||||
<p class="adv-frage">%s</p>
|
||||
<form method="post" class="opt-form">%s</form>
|
||||
</div>""" % (esc(r["name"]), esc(r["name"]), idx + 1, len(fragen),
|
||||
feedback, esc(aktuelle["frage"]), buttons))
|
||||
return adventure_seite(inhalt)
|
||||
</div>""" % (label, esc(r["name"]), esc(r["beschreibung"]),
|
||||
idx + 1, len(fragen), feedback,
|
||||
esc(aktuelle["frage"]), buttons))
|
||||
return adventure_seite(inhalt)
|
||||
|
||||
# ── Alle Fragen gelöst (oder keine) → Beschreibung + Ausgänge / Sieg ──
|
||||
ausgaenge = db.execute(
|
||||
"SELECT richtung, nach_raum FROM ausgaenge WHERE von_raum=? ORDER BY rowid", (id,)
|
||||
).fetchall()
|
||||
db.close()
|
||||
# ── Alle Fragen dieses Raums beantwortet ──
|
||||
ausgaenge = db.execute(
|
||||
"SELECT richtung, nach_raum, hinweis FROM ausgaenge "
|
||||
"WHERE von_raum=? ORDER BY rowid", (id,)
|
||||
).fetchall()
|
||||
db.close()
|
||||
|
||||
if r["ist_ziel"]:
|
||||
inhalt = ("""
|
||||
# ZIEL erreicht → Sieg
|
||||
if typ == "ziel":
|
||||
inhalt = ("""
|
||||
<div class="adv-card" style="text-align:center">
|
||||
<div class="win-emoji">🎉🧱🎉</div>
|
||||
<div class="adv-floor">Mission erfüllt</div>
|
||||
<h1>%s</h1>
|
||||
<h1>Befreit!</h1>
|
||||
<p class="adv-desc">%s</p>
|
||||
<p class="adv-frage" style="color:#f59e0b">„Everything is awesome!“ 🎵</p>
|
||||
<a href="/app/" class="exit-link">Nochmal spielen 🔁</a>
|
||||
<a href="/app/pinnwand" class="ghost-link">Sieg in den Kommentaren feiern 💬</a>
|
||||
</div>""" % (esc(r["name"]), esc(r["beschreibung"])))
|
||||
return adventure_seite(inhalt)
|
||||
</div>""" % esc(r["beschreibung"]))
|
||||
return adventure_seite(inhalt)
|
||||
|
||||
exits_html = ""
|
||||
for a in ausgaenge:
|
||||
exits_html += ('<a class="exit-link" href="/app/raum/%d">%s</a>'
|
||||
% (a["nach_raum"], esc(a["richtung"])))
|
||||
if not ausgaenge:
|
||||
exits_html = '<a class="exit-link" href="/app/">Zurück zum Start</a>'
|
||||
|
||||
geschafft = ""
|
||||
if fragen: # Etage hatte Fragen und alle wurden gelöst
|
||||
geschafft = ('<p class="adv-progress">✅ Alle Sicherheitsfragen geknackt – '
|
||||
'der Weg ist frei!</p>')
|
||||
|
||||
inhalt = ("""
|
||||
# SACKGASSE → "Haha, Sackgasse!" + zurück zum Gang
|
||||
if typ == "sackgasse":
|
||||
zurueck = ausgaenge[0] if ausgaenge else None
|
||||
back_btn = (
|
||||
'<a class="exit-link" href="/app/raum/%d">%s</a>'
|
||||
% (zurueck["nach_raum"], esc(zurueck["richtung"]))
|
||||
if zurueck else
|
||||
'<a class="exit-link" href="/app/">Zurück zum Start</a>')
|
||||
inhalt = ("""
|
||||
<div class="adv-card">
|
||||
<div class="adv-floor">🏢 %s</div>
|
||||
<div class="adv-floor">🚧 Sackgasse</div>
|
||||
<h1>Haha – Sackgasse!</h1>
|
||||
<p class="adv-desc">Du hast dich durch einen ganzen Haufen Trivia gequält …
|
||||
und stehst jetzt vor einer kahlen Wand. <strong>Das war der falsche Weg!</strong>
|
||||
Geh zurück in den Gang und nimm die andere Richtung.</p>
|
||||
%s
|
||||
</div>""" % back_btn)
|
||||
return adventure_seite(inhalt)
|
||||
|
||||
# THEMA gelöst → Erfolg + Ausgang zur nächsten Etage
|
||||
weiter = ausgaenge[0] if ausgaenge else None
|
||||
weiter_btn = (
|
||||
'<a class="exit-link" href="/app/raum/%d">%s</a>'
|
||||
% (weiter["nach_raum"], esc(weiter["richtung"]))
|
||||
if weiter else
|
||||
'<a class="exit-link" href="/app/">Zurück zum Start</a>')
|
||||
inhalt = ("""
|
||||
<div class="adv-card">
|
||||
<div class="adv-floor">✅ Richtiger Weg</div>
|
||||
<h1>%s</h1>
|
||||
<p class="adv-desc">%s</p>
|
||||
<p class="adv-progress">✅ Alle Fragen geknackt – der Weg nach oben ist frei!</p>
|
||||
%s
|
||||
<div>%s</div>
|
||||
</div>""" % (esc(r["name"]), esc(r["name"]), esc(r["beschreibung"]),
|
||||
geschafft, exits_html))
|
||||
</div>""" % (esc(r["name"]), esc(r["beschreibung"]), weiter_btn))
|
||||
return adventure_seite(inhalt)
|
||||
|
||||
# ═══ Gang / Start: Beschreibung + Wege (Navigations-Entscheidung) ═══
|
||||
ausgaenge = db.execute(
|
||||
"SELECT richtung, nach_raum, hinweis FROM ausgaenge "
|
||||
"WHERE von_raum=? ORDER BY rowid", (id,)
|
||||
).fetchall()
|
||||
db.close()
|
||||
|
||||
wege_html = ""
|
||||
for a in ausgaenge:
|
||||
wege_html += ("""
|
||||
<div class="pfad">
|
||||
<a class="exit-link" href="/app/raum/%d">%s</a>
|
||||
<span class="pfad-hinweis">%s</span>
|
||||
</div>""" % (a["nach_raum"], esc(a["richtung"]), esc(a["hinweis"] or "")))
|
||||
if not ausgaenge:
|
||||
wege_html = '<a class="exit-link" href="/app/">Zurück zum Start</a>'
|
||||
|
||||
if r["etage"] and r["etage"] > 0:
|
||||
etage_label = "🏢 Etage %d" % r["etage"]
|
||||
else:
|
||||
etage_label = "🚪 Eingang"
|
||||
inhalt = ("""
|
||||
<div class="adv-card">
|
||||
<div class="adv-floor">%s</div>
|
||||
<h1>%s</h1>
|
||||
<p class="adv-desc">%s</p>
|
||||
<div class="pfade">%s</div>
|
||||
</div>""" % (etage_label, esc(r["name"]), esc(r["beschreibung"]), wege_html))
|
||||
return adventure_seite(inhalt)
|
||||
|
||||
|
||||
|
|
|
|||
216
init_db.py
216
init_db.py
|
|
@ -1,10 +1,26 @@
|
|||
"""
|
||||
U18 – Klick-Adventure "Einbruch im Octan-Tower" (The-Lego-Movie-Style)
|
||||
=====================================================================
|
||||
Legt die SQLite-Datenbank `adventure.db` an und befüllt sie mit:
|
||||
- raeume : die Etagen des Octan-Towers
|
||||
- ausgaenge : welcher Ausgang führt in welche Etage
|
||||
- fragen : Trivia-Fragen pro Etage (Multiple-Choice)
|
||||
Legt die SQLite-Datenbank `adventure.db` an und befüllt sie mit einem
|
||||
verzweigten Verlies:
|
||||
|
||||
- raeume : Räume/Gänge des Octan-Towers (mit Typ: start/gang/thema/
|
||||
sackgasse/ziel)
|
||||
- ausgaenge : welcher Weg (links/rechts/…) führt in welchen Raum – inkl.
|
||||
Story-Hinweis für die Entscheidung
|
||||
- fragen : Fragen pro Raum
|
||||
• Themen-Räume → thematische Fragen (der RICHTIGE Weg)
|
||||
• Sackgassen → themenfremde Trivia (der FALSCHE Weg)
|
||||
• Ziel-Raum → die finale Lord-Business-Frage
|
||||
|
||||
Spielprinzip
|
||||
------------
|
||||
Jede Etage ist ein Gang, der sich gabelt. Nach den Text-Hinweisen entscheidet
|
||||
man sich für links oder rechts:
|
||||
• RICHTIGER Weg → wenige thematische Fragen → direkt eine Etage höher.
|
||||
• FALSCHER Weg → viele themenfremde Trivia → "Haha, Sackgasse!" → zurück
|
||||
zum Gang, dann den richtigen Weg nehmen.
|
||||
Ganz oben wartet der Kragle-Tresor mit der finalen Lord-Business-Frage.
|
||||
|
||||
Leitprinzip (wie in U17):
|
||||
LOKAL schreiben & pushen – auf dem SERVER einmalig ausführen:
|
||||
|
|
@ -31,13 +47,15 @@ CREATE TABLE raeume (
|
|||
id INTEGER PRIMARY KEY,
|
||||
name TEXT,
|
||||
beschreibung TEXT,
|
||||
ist_ziel INTEGER DEFAULT 0
|
||||
typ TEXT, -- 'start' | 'gang' | 'thema' | 'sackgasse' | 'ziel'
|
||||
etage INTEGER -- 0 = Lobby, 1..3 = Etagen, 4 = Dach
|
||||
);
|
||||
|
||||
CREATE TABLE ausgaenge (
|
||||
von_raum INTEGER,
|
||||
richtung TEXT,
|
||||
nach_raum INTEGER
|
||||
richtung TEXT, -- kurzer Button-Text, z. B. "⬅️ Nach links"
|
||||
nach_raum INTEGER,
|
||||
hinweis TEXT -- Story-Hinweis unter dem Button
|
||||
);
|
||||
|
||||
CREATE TABLE fragen (
|
||||
|
|
@ -49,47 +67,105 @@ CREATE TABLE fragen (
|
|||
);
|
||||
""")
|
||||
|
||||
# ─── Räume: der Aufstieg durch den Octan-Tower ───────────────────────────────
|
||||
# ─── Räume ───────────────────────────────────────────────────────────────────
|
||||
# IDs bewusst gruppiert: 1 = Lobby, 10er = Etage 1, 20er = Etage 2, 30er = Etage 3.
|
||||
raeume = [
|
||||
# ---- Start ----
|
||||
(1, "Lobby des Octan-Towers",
|
||||
"Die Türen fallen hinter dir zu. Präsident Business' Wolkenkratzer ragt "
|
||||
"über dir auf. Ein gläserner Aufzug führt nach oben – ganz oben wartet das "
|
||||
"Kragle. Everything is ... noch nicht awesome.", 0),
|
||||
"Die gläsernen Türen fallen hinter dir zu – kein Zurück. Über dir ragt der "
|
||||
"Wolkenkratzer von Präsident Business auf. Ganz oben, im Kragle-Tresor, "
|
||||
"wartet der gefährlichste Kleber der Welt. Ein einzelner Aufzug führt nach "
|
||||
"oben. Zeit, ihn zu stoppen.",
|
||||
"start", 0),
|
||||
|
||||
(2, "1. Etage – Die Hai-Etage 🦈",
|
||||
"Ein tiefer Wassergraben voller hungriger Haie trennt dich vom nächsten "
|
||||
"Aufzug. Der Sicherheits-Wächter lässt dich nur weiter, wenn du seine "
|
||||
"Fragen richtig beantwortest.", 0),
|
||||
# ---- Etage 1: Haie (richtiger Weg = LINKS → 11, Sackgasse = RECHTS → 12) ----
|
||||
(10, "1. Etage – Der Hai-Gang 🦈",
|
||||
"Der Aufzug öffnet sich. Der Gang gabelt sich in zwei Richtungen. Von "
|
||||
"LINKS weht feuchte, salzige Luft herüber – dort muss das riesige "
|
||||
"Haibecken sein, das du überqueren musst. Von RECHTS blinkt in kaltem Rot "
|
||||
"ein Schild: „Nur Personal – Abstellkammer“.",
|
||||
"gang", 1),
|
||||
(11, "Steg über dem Haibecken 🦈",
|
||||
"Du folgst der salzigen Luft. Unter dem schmalen Steg schnappen hungrige "
|
||||
"Haie. Das Sicherheitssystem summt: Beweise dein Hai-Wissen, sonst fährt "
|
||||
"der Steg ein!",
|
||||
"thema", 1),
|
||||
(12, "Die Abstellkammer 🧹",
|
||||
"Du drückst die Tür auf – Besen, Eimer, ein flackernder Wartungs-Bot. "
|
||||
"„HALT! Sicherheits-Quiz!“, quäkt er und stellt dir eine Frage nach der "
|
||||
"anderen …",
|
||||
"sackgasse", 1),
|
||||
|
||||
(3, "2. Etage – Die Laser-Etage 🔴",
|
||||
"Rote Laserstrahlen zerschneiden den Raum zu einem glühenden Gitter. Ein "
|
||||
"Terminal blinkt: Beantworte die Fragen korrekt, sonst bleibt das "
|
||||
"Laser-Gitter für immer aktiv.", 0),
|
||||
# ---- Etage 2: Laser (richtiger Weg = RECHTS → 21, Sackgasse = LINKS → 22) ----
|
||||
(20, "2. Etage – Der Laser-Gang 🔴",
|
||||
"Rote Strahlen zerschneiden die Luft zu einem glühenden Gitter. LINKS "
|
||||
"gähnt ein dunkler Wartungsschacht, aus dem es muffig nach Staub riecht. "
|
||||
"RECHTS pulsiert Licht hinter einer Tür mit der Aufschrift "
|
||||
"„Laser-Kontrollraum“.",
|
||||
"gang", 2),
|
||||
(21, "Der Laser-Kontrollraum 🔴",
|
||||
"Im Kontrollraum flimmern hundert Regler. Wer die Laser abschalten will, "
|
||||
"muss beweisen, dass er versteht, wie sie funktionieren.",
|
||||
"thema", 2),
|
||||
(22, "Der Wartungsschacht 🕳️",
|
||||
"Eng, dunkel, staubig – und natürlich eine Sackgasse. Bevor du das merkst, "
|
||||
"erwacht ein alter Prüf-Automat und feuert Trivia auf dich ab …",
|
||||
"sackgasse", 2),
|
||||
|
||||
(4, "3. Etage – Die Laserhai-Etage 🦈⚡",
|
||||
"Und dann ... Haie. Mit Laserstrahlen. Auf dem Kopf. Präsident Business "
|
||||
"meint es wirklich ernst. Nur wer clever genug ist, kommt am "
|
||||
"Laserhai-Becken vorbei.", 0),
|
||||
# ---- Etage 3: Laserhaie (richtiger Weg = LINKS → 31, Sackgasse = RECHTS → 32) ----
|
||||
(30, "3. Etage – Der Laserhai-Gang 🦈⚡",
|
||||
"Absurd, aber real: Haie. Mit Lasern. Auf dem Kopf. LINKS führt ein "
|
||||
"schmaler Steg direkt über das Laserhai-Becken – da musst du durch. RECHTS "
|
||||
"lockt ein gemütlicher Pausenraum, aus dem Kaffeeduft strömt.",
|
||||
"gang", 3),
|
||||
(31, "Steg über dem Laserhai-Becken 🦈⚡",
|
||||
"Unter dir kreisen die Laserhaie und zwinkern gefährlich. Das letzte "
|
||||
"Sicherheitssystem vor dem Dach will dich prüfen – bleib cool!",
|
||||
"thema", 3),
|
||||
(32, "Der Pausenraum ☕",
|
||||
"Warm, gemütlich, verlockend … und eine glasklare Falle. Der Kaffeeautomat "
|
||||
"entpuppt sich als Quiz-Maschine und lässt dich nicht mehr los …",
|
||||
"sackgasse", 3),
|
||||
|
||||
(5, "Das Dach – Der Kragle-Tresor 🏆",
|
||||
"Du stehst vor dem Kragle – ein einziger Klecks Kleber, der die ganze "
|
||||
"Welt für immer einfrieren könnte. Doch du hast es rechtzeitig geschafft "
|
||||
"und Präsident Business gestoppt!", 1),
|
||||
# ---- Dach: Ziel ----
|
||||
(40, "Das Dach – Der Kragle-Tresor 🏆",
|
||||
"Ganz oben. Vor dir schwebt das Kragle im offenen Tresor. Nur noch eine "
|
||||
"letzte Sicherung von Präsident Business steht zwischen dir und der Rettung "
|
||||
"der Welt.",
|
||||
"ziel", 4),
|
||||
]
|
||||
db.executemany(
|
||||
"INSERT INTO raeume (id, name, beschreibung, ist_ziel) VALUES (?,?,?,?)",
|
||||
"INSERT INTO raeume (id, name, beschreibung, typ, etage) VALUES (?,?,?,?,?)",
|
||||
raeume,
|
||||
)
|
||||
|
||||
# ─── Ausgänge: linearer Aufstieg (jede Etage → nächste Etage) ────────────────
|
||||
# ─── Ausgänge (mit Story-Hinweis) ────────────────────────────────────────────
|
||||
# Gänge haben ZWEI Wege (richtig/falsch). Themen-Räume führen eine Etage höher,
|
||||
# Sackgassen zurück zum jeweiligen Gang.
|
||||
ausgaenge = [
|
||||
(1, "Aufzug nach oben 🛗", 2),
|
||||
(2, "Treppe hoch 🪜", 3),
|
||||
(3, "Treppe hoch 🪜", 4),
|
||||
(4, "Aufs Dach 🏢", 5),
|
||||
# Lobby → Etage 1
|
||||
(1, "🛗 Aufzug nach oben", 10, "Der einzige Weg führt nach oben."),
|
||||
|
||||
# Etage 1 (richtig = LINKS → 11, falsch = RECHTS → 12)
|
||||
(10, "⬅️ Nach links", 11, "🌊 Der salzigen Meeresluft zum Haibecken folgen."),
|
||||
(10, "➡️ Nach rechts", 12, "🚪 Durch die Tür „Abstellkammer“."),
|
||||
(11, "🪜 Treppe zur 2. Etage", 20, "Der Steg hält – schnell weiter nach oben!"),
|
||||
(12, "↩️ Zurück in den Hai-Gang", 10, "Diese Kammer ist eine Sackgasse."),
|
||||
|
||||
# Etage 2 (richtig = RECHTS → 21, falsch = LINKS → 22)
|
||||
(20, "⬅️ Nach links", 22, "🕳️ In den dunklen Wartungsschacht."),
|
||||
(20, "➡️ Nach rechts", 21, "🔴 Zum „Laser-Kontrollraum“."),
|
||||
(21, "🪜 Treppe zur 3. Etage", 30, "Die Laser erlöschen – der Weg ist frei!"),
|
||||
(22, "↩️ Zurück in den Laser-Gang", 20, "Der Schacht endet im Nichts."),
|
||||
|
||||
# Etage 3 (richtig = LINKS → 31, falsch = RECHTS → 32)
|
||||
(30, "⬅️ Nach links", 31, "🌉 Über den Steg am Laserhai-Becken."),
|
||||
(30, "➡️ Nach rechts", 32, "☕ In den gemütlichen Pausenraum."),
|
||||
(31, "🏢 Aufs Dach zum Kragle-Tresor", 40, "Die Laserhaie tauchen ab – nach oben!"),
|
||||
(32, "↩️ Zurück in den Laserhai-Gang", 30, "Der Pausenraum war eine Falle."),
|
||||
]
|
||||
db.executemany(
|
||||
"INSERT INTO ausgaenge (von_raum, richtung, nach_raum) VALUES (?,?,?)",
|
||||
"INSERT INTO ausgaenge (von_raum, richtung, nach_raum, hinweis) VALUES (?,?,?,?)",
|
||||
ausgaenge,
|
||||
)
|
||||
|
||||
|
|
@ -97,38 +173,66 @@ db.executemany(
|
|||
# Pro Etage 4 Fragen: 1–2 thematisch passend, danach Popkultur.
|
||||
# "antwort" ist die korrekte Option, "optionen" alle Auswahlmöglichkeiten (|-getrennt).
|
||||
fragen = [
|
||||
# ── Etage 1: Haie ─────────────────────────────────────────────
|
||||
(2, "🦈 Welcher Hai ist der größte Fisch der Welt?",
|
||||
# ── Etage 1 · RICHTIG: Hai-Fragen (Raum 11) ──────────────────
|
||||
(11, "🦈 Welcher Hai ist der größte Fisch der Welt?",
|
||||
"Walhai", "Weißer Hai|Walhai|Hammerhai"),
|
||||
(2, "🦈 Wie heißt Steven Spielbergs berühmter Hai-Film von 1975?",
|
||||
(11, "🦈 Wie heißt Steven Spielbergs berühmter Hai-Film von 1975?",
|
||||
"Der weiße Hai", "Der weiße Hai|Free Willy|Findet Nemo"),
|
||||
(2, "🎮 Wie heißt Marios grün gekleideter Bruder?",
|
||||
"Luigi", "Luigi|Wario|Yoshi"),
|
||||
(2, "🎬 In welcher Weltraum-Saga kämpfen Jedi gegen Sith?",
|
||||
"Star Wars", "Star Trek|Star Wars|Herr der Ringe"),
|
||||
(11, "🦈 Womit atmen Haie unter Wasser?",
|
||||
"Kiemen", "Lungen|Kiemen|Schwimmflossen"),
|
||||
|
||||
# ── Etage 2: Laser ────────────────────────────────────────────
|
||||
(3, "🔴 Wofür steht das Akronym LASER?",
|
||||
# ── Etage 1 · FALSCH: themenfremde Trivia (Raum 12) ──────────
|
||||
(12, "🎮 Wie heißt Marios grün gekleideter Bruder?",
|
||||
"Luigi", "Luigi|Wario|Yoshi"),
|
||||
(12, "🎬 In welcher Weltraum-Saga kämpfen Jedi gegen Sith?",
|
||||
"Star Wars", "Star Trek|Star Wars|Herr der Ringe"),
|
||||
(12, "📱 Welches Unternehmen stellt das iPhone her?",
|
||||
"Apple", "Microsoft|Apple|Samsung"),
|
||||
(12, "⏰ Wie viele Minuten hat eine Stunde?",
|
||||
"60", "24|60|100"),
|
||||
|
||||
# ── Etage 2 · RICHTIG: Laser-Fragen (Raum 21) ────────────────
|
||||
(21, "🔴 Wofür steht das Akronym LASER?",
|
||||
"Light Amplification by Stimulated Emission of Radiation",
|
||||
"Light Amplification by Stimulated Emission of Radiation|"
|
||||
"Large Automatic System for Energy Reflection|"
|
||||
"Leuchtende Aktive Strahlen Emissions-Röhre"),
|
||||
(3, "⚔️ Welche leuchtende Laser-Waffe führt ein Jedi in Star Wars?",
|
||||
"Leuchtende Aktive Strahlen-Emissions-Röhre"),
|
||||
(21, "⚔️ Welche leuchtende Laser-Waffe führt ein Jedi in Star Wars?",
|
||||
"Lichtschwert", "Lichtschwert|Laserpistole|Zauberstab"),
|
||||
(3, "🦸 Welcher Superheld trägt ein blaues Kostüm mit rotem Umhang und einem 'S'?",
|
||||
"Superman", "Batman|Superman|Spider-Man"),
|
||||
(3, "🎮 In welchem Spiel fängt man Kreaturen in kleinen Bällen?",
|
||||
"Pokémon", "Minecraft|Tetris|Pokémon"),
|
||||
(21, "🌈 Welche Farbe hat ein klassischer Laserpointer meistens?",
|
||||
"Rot", "Rot|Lila|Schwarz"),
|
||||
|
||||
# ── Etage 3: Laserhaie ────────────────────────────────────────
|
||||
(4, "🦈⚡ In welchem Film wünscht sich Dr. Evil „Haie mit Laserstrahlen auf dem Kopf“?",
|
||||
# ── Etage 2 · FALSCH: themenfremde Trivia (Raum 22) ──────────
|
||||
(22, "🦸 Welcher Superheld trägt ein blaues Kostüm mit rotem Umhang und „S“?",
|
||||
"Superman", "Batman|Superman|Spider-Man"),
|
||||
(22, "🎮 In welchem Spiel fängt man Kreaturen in kleinen Bällen?",
|
||||
"Pokémon", "Minecraft|Tetris|Pokémon"),
|
||||
(22, "🗼 Wie heißt die Hauptstadt von Frankreich?",
|
||||
"Paris", "Paris|Rom|Madrid"),
|
||||
(22, "🐶 Welches Tier bellt?",
|
||||
"Hund", "Katze|Hund|Kuh"),
|
||||
|
||||
# ── Etage 3 · RICHTIG: Laserhai-Fragen (Raum 31) ─────────────
|
||||
(31, "🦈⚡ In welchem Film wünscht sich Dr. Evil „Haie mit Laserstrahlen auf dem Kopf“?",
|
||||
"Austin Powers", "James Bond|Austin Powers|Men in Black"),
|
||||
(4, "🧱 Wie heißt der Bösewicht, in dessen Turm du gerade einbrichst?",
|
||||
"Lord Business", "Lord Business|Lord Vader|Lord Farquaad"),
|
||||
(4, "🎵 Wie lautet der Ohrwurm-Titelsong aus „The Lego Movie“?",
|
||||
"Everything Is Awesome", "Everything Is Awesome|Let It Go|Happy"),
|
||||
(4, "<EFBFBD> In welchem Film-Franchise werden Dinosaurier in einem Park geklont?",
|
||||
(31, "🧬 Woraus setzt sich ein „Laserhai“ zusammen?",
|
||||
"Hai und Laser", "Hai und Laser|Katze und Hund|Auto und Boot"),
|
||||
(31, "😉 Wenn ein Laserhai gefährlich zwinkert – was schießt aus seinen Augen?",
|
||||
"Laserstrahlen", "Wasser|Laserstrahlen|Konfetti"),
|
||||
|
||||
# ── Etage 3 · FALSCH: themenfremde Trivia (Raum 32) ──────────
|
||||
(32, "🦖 In welchem Film-Franchise werden Dinosaurier in einem Park geklont?",
|
||||
"Jurassic Park", "Jurassic Park|King Kong|Godzilla"),
|
||||
(32, "🕷️ Wie viele Beine hat eine Spinne?",
|
||||
"8", "6|8|10"),
|
||||
(32, "🎨 Welche Farbe entsteht aus Blau und Gelb?",
|
||||
"Grün", "Grün|Lila|Orange"),
|
||||
(32, "🎮 Aus welchem Land kommt der Spielehersteller Nintendo?",
|
||||
"Japan", "USA|Japan|Deutschland"),
|
||||
|
||||
# ── Dach · ZIEL: finale Lord-Business-Frage (Raum 40) ────────
|
||||
(40, "🧱 FINALE: Wie heißt der Bösewicht, in dessen Turm du gerade eingebrochen bist?",
|
||||
"Lord Business", "Lord Business|Lord Vader|Lord Farquaad"),
|
||||
]
|
||||
db.executemany(
|
||||
"INSERT INTO fragen (raum_id, frage, antwort, optionen) VALUES (?,?,?,?)",
|
||||
|
|
|
|||
Loading…
Reference in a new issue