144 lines
6.1 KiB
Python
144 lines
6.1 KiB
Python
"""
|
||
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)
|
||
|
||
Leitprinzip (wie in U17):
|
||
LOKAL schreiben & pushen – auf dem SERVER einmalig ausführen:
|
||
python3 init_db.py
|
||
Danach entsteht adventure.db direkt neben diesem Skript.
|
||
"""
|
||
import os
|
||
import sqlite3
|
||
|
||
# adventure.db immer neben dieser Datei ablegen (unabhängig vom Arbeitsverzeichnis)
|
||
BASE_DIR = os.path.dirname(os.path.abspath(__file__))
|
||
DB_PATH = os.path.join(BASE_DIR, "adventure.db")
|
||
|
||
db = sqlite3.connect(DB_PATH)
|
||
|
||
# Tabellen bei jedem Lauf sauber neu aufbauen (DROP statt DELETE, damit auch
|
||
# geänderte Spalten greifen).
|
||
db.executescript("""
|
||
DROP TABLE IF EXISTS raeume;
|
||
DROP TABLE IF EXISTS ausgaenge;
|
||
DROP TABLE IF EXISTS fragen;
|
||
|
||
CREATE TABLE raeume (
|
||
id INTEGER PRIMARY KEY,
|
||
name TEXT,
|
||
beschreibung TEXT,
|
||
ist_ziel INTEGER DEFAULT 0
|
||
);
|
||
|
||
CREATE TABLE ausgaenge (
|
||
von_raum INTEGER,
|
||
richtung TEXT,
|
||
nach_raum INTEGER
|
||
);
|
||
|
||
CREATE TABLE fragen (
|
||
id INTEGER PRIMARY KEY,
|
||
raum_id INTEGER,
|
||
frage TEXT,
|
||
antwort TEXT,
|
||
optionen TEXT -- Antwortmöglichkeiten, per | getrennt
|
||
);
|
||
""")
|
||
|
||
# ─── Räume: der Aufstieg durch den Octan-Tower ───────────────────────────────
|
||
raeume = [
|
||
(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),
|
||
|
||
(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),
|
||
|
||
(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),
|
||
|
||
(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),
|
||
|
||
(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),
|
||
]
|
||
db.executemany(
|
||
"INSERT INTO raeume (id, name, beschreibung, ist_ziel) VALUES (?,?,?,?)",
|
||
raeume,
|
||
)
|
||
|
||
# ─── Ausgänge: linearer Aufstieg (jede Etage → nächste Etage) ────────────────
|
||
ausgaenge = [
|
||
(1, "Aufzug nach oben 🛗", 2),
|
||
(2, "Treppe hoch 🪜", 3),
|
||
(3, "Treppe hoch 🪜", 4),
|
||
(4, "Aufs Dach 🏢", 5),
|
||
]
|
||
db.executemany(
|
||
"INSERT INTO ausgaenge (von_raum, richtung, nach_raum) VALUES (?,?,?)",
|
||
ausgaenge,
|
||
)
|
||
|
||
# ─── Trivia-Fragen pro Etage ─────────────────────────────────────────────────
|
||
# 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?",
|
||
"Walhai", "Weißer Hai|Walhai|Hammerhai"),
|
||
(2, "🦈 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"),
|
||
|
||
# ── Etage 2: Laser ────────────────────────────────────────────
|
||
(3, "🔴 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?",
|
||
"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"),
|
||
|
||
# ── Etage 3: Laserhaie ────────────────────────────────────────
|
||
(4, "🦈⚡ 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?",
|
||
"Jurassic Park", "Jurassic Park|King Kong|Godzilla"),
|
||
]
|
||
db.executemany(
|
||
"INSERT INTO fragen (raum_id, frage, antwort, optionen) VALUES (?,?,?,?)",
|
||
fragen,
|
||
)
|
||
|
||
db.commit()
|
||
db.close()
|
||
|
||
print("Datenbank adventure.db angelegt:", DB_PATH)
|
||
print(" Räume:", len(raeume),
|
||
"| Ausgänge:", len(ausgaenge),
|
||
"| Fragen:", len(fragen))
|