eis-website/init_db.py

144 lines
6.1 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

"""
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: 12 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))