| # | Bereich | Beschreibung |
|---|---|---|
| 1 | SSH-Verbindung | Sie haben SSH-Schlüssel erstellt (privat und öffentlich), den öffentlichen Schlüssel an Herrn Franke geschickt, der ihn auf dem Server gespeichert hat. Dies ermöglicht Ihnen die sichere Anmeldung am Server. |
| 2 | Dateinavigation und -bearbeitung | Sie haben mit Befehlen wie cd und ls -a durch die Dateien auf dem Server navigiert und Dateien mit dem Editor Nano erstellt und bearbeitet. |
| 3 | Webdesign | Sie haben eine Landing Page in HTML erstellt und diese mit CSS ansprechend und responsiv gestaltet. |
| 4 | JavaScript Interaktivität | Sie haben dynamischer Inhalte mit JavaScript implementiert, einschließlich einer Echtzeituhr, eines Sprachumschalters und eines Mehrwertsteuerrechners. |
| 5 | Python und Flask | Sie haben eine eigene Entwicklungsumgebung eingerichtet, Flask-Web-Frameworks installiert und einen eigenen Flask-Server gehostet, der über spezifische Ports erreichbar ist. |
| 7 | Rätsellogik im Backend | Sie haben eine Rätsellogik in Python realisiert, die einen lösbaren Escape Room darstellt, der die Spieler bei erfolgreicher Lösung an die nächste Gruppe weiterleitet. |
Vertiefung und Anwendung von bereits Erlerntem und Einblick in den Aufbau, Integration und Anwendung von Datenbanken in Webanwendungen.
| # | Aufgabe | Beschreibung |
|---|---|---|
| 1 | Wiederholung: Hosting des Escape Rooms | Erneutes starten des bereits erstellten Escape Room, um sich mit Flask und Python wieder vertraut zu machen. |
| 2 | Integration der Datenbank | Integration von einer bereits erstellten Datenbank und Tabelle, um die Rätsellösungen zu speichern. phpMyAdmin verwenden um auf Datenbanken zuzugreifen und zu bearbeiten. Mit Python auf diese Datenbank zugreifen |
| 3 | Entwicklung eines Labyrinths (Click-Adventure) | Entwicklung eines weiteren Rätsels in Form eines Labyrinths mit Entscheidungspfaden. Jede Gruppe erstellt dafür eine eigene Datenbanktabelle. |
Die Aufgaben werden auf den nächsten Seiten Schritt für Schritt in Form von Selbstlernmaterial erklärt
Herr Franke und Herr Müller können nicht allen gleichzeitig Support geben oder alle aufkommende Probleme auf Anhieb erkennen oder lösen - mittlerweile sind die Anwendungen recht komplex. Wir erwarten daher ein gewisses Maß an Selbstständigkeit:
Weitere wichtige Punkte zur Beachtung:
$ angezeigt wird, ist die Shell nicht aktiviert. Geben Sie bash ein, um die Bash-Shell zu starten.ls -a einen Überblick im Terminal.python3 ausgeführt werden müssenDiese Aufgabe dient dazu, Sie mit der bereits entwickelten Flask-Anwendung wieder vertraut zu machen. Folgen Sie den nachstehenden Schritten, um die Anwendung erneut auf Ihrem Server zu starten.
Wir erstellen gemeinsam ein funktionierendes, kurzes Escape Game! Alle anwesenden Gruppen bringen ihre eigene Flask-Anwendung online.
Verbinden Sie sich via SSH mit Ihrem Server, indem Sie entweder die URL edumake.de oder die IP-Adresse 89.58.62.146 verwenden. Bitte beachten Sie, dass eine Verbindung über das Eduroam-Netzwerk wegen der Portbeschränkungen (Port 22 gesperrt) nicht möglich ist. Nutzen Sie eine alternative Internetverbindung, wie einen privaten WLAN-Zugang oder einen mobilen Hotspot.
ssh benutzername@edumake.de oder ssh benutzername@89.58.62.146. Mit Putty müssen Sie ebenfalls die URL oder IP-Adresse eingeben und den Private-Key unter Auth öffnen.ssh benutzername@edumake.de oder ssh benutzername@89.58.62.146.Nach dem erfolgreichen Verbindungsaufbau per SSH können Sie sich zunächst einen Überblick über Ihre Ordner verschaffen:
pwd # Zeigt den aktuellen Pfad (z. B. /home/isa17)
ls -a # Zeigt auch versteckte Dateien wie .ssh
tree -L 2 # Zeigt nur Ordner, maximal 2 Ebenen tief
Überprüfen Sie die Datei app.py, um sicherzustellen, dass die Rätsellogik korrekt implementiert ist. Sie können dies entweder über Nano direkt auf dem Server tun oder durch den webbasierten Filebrowser:
nano ~/flask_app/app.py
Kurzer Exkurs in wichtige Terminal Befehle:
| Befehl | Beschreibung | Beispiel |
|---|---|---|
cd /var |
Wechselt in das Verzeichnis /var vom Wurzelverzeichnis aus. |
Navigiert direkt zum absoluten Pfad /var. |
cd www |
Wechselt in das Verzeichnis www, relativ zum aktuellen Verzeichnis. |
Navigiert zum Unterordner www des aktuellen Verzeichnisses. |
cd .. |
Wechselt in das übergeordnete Verzeichnis. | Geht ein Verzeichnis zurück. |
cd oder cd ~ |
Wechselt in das Homeverzeichnis des Benutzers. | Navigiert direkt nach Hause. |
ls -a |
Zeigt alle Dateien und Verzeichnisse, einschließlich versteckter Dateien, im aktuellen Verzeichnis an. | Listet alle Inhalte des aktuellen Verzeichnisses auf. |
pwd |
Zeigt den Pfad des aktuellen Verzeichnisses an. | Gibt den vollständigen Pfad des aktuellen Verzeichnisses zurück. |
Es ist wichtig, den Unterschied zwischen dem Wurzelverzeichnis und dem Homeverzeichnis in Unix-basierten Betriebssystemen zu verstehen:
Das Wurzelverzeichnis, dargestellt durch einen Schrägstrich (/), ist das oberste Verzeichnis im Dateisystem eines Unix-basierten Betriebssystems. Es enthält alle anderen Verzeichnisse des Systems, einschließlich der Homeverzeichnisse der Benutzer sowie wichtiger Systemverzeichnisse wie /bin, /etc, /usr, und /var.
Jeder Benutzer hat ein persönliches Homeverzeichnis, üblicherweise unter /home/isa##. Dort befinden sich alle arbeitsrelevanten Dateien und Ordner für das Projekt.
Die Ordnerstruktur wurde überarbeitet, sodass jetzt zwei zentrale Projektordner direkt im Homeverzeichnis liegen:
www/ – enthält die statische Landingpage (HTML, CSS, JS)flask_app/ – enthält die eigentliche Flask-Anwendung (mit app.py, templates/ usw.)👉 Diese klare Trennung erleichtert die Wartung und den Zugriff. Sie müssen nicht mehr im /var/www-Verzeichnis arbeiten, sondern finden alles direkt unter ~/www bzw. ~/flask_app.
Bevor Sie die Flask-Anwendung starten, aktivieren Sie zunächst die virtuelle Umgebung. Öffnen Sie dazu das Terminal und wechseln Sie in das entsprechende Verzeichnis Ihrer Flask-Anwendung:
cd ~/flask_app
source venv/bin/activate
✅ Nach der Aktivierung verändert sich Ihre Eingabeaufforderung – der Name der virtuellen Umgebung erscheint in Klammern, z. B.:
(venv) isa##@server:~/flask_app$
Starten Sie die Flask-Anwendung mit dem folgenden Befehl:
python3 app.py
Ersetzen Sie # mit Ihrer spezifischen Tandem-Nummer, entsprechend dem Port, der Ihnen zugewiesen wurde. Dies sorgt dafür, dass Ihre Anwendung auf dem korrekten Port läuft und von außen erreichbar ist.
Nachdem Sie die Flask-Anwendung gestartet haben, können Sie diese über Ihren Webbrowser erreichen. Verwenden Sie dazu die Ihrer Gruppe zugeordnete Subdomain und den entsprechenden Port. Geben Sie die folgende URL in Ihren Browser ein:
http://isa#.edumake.de:80##
Ersetzen Sie beide # mit Ihrer spezifischen Tandem-Nummer. Zum Beispiel würde Gruppe 1 ihre Anwendung über http://isa1.edumake.de:8001 aufrufen.
Datenbanken sind essentiell für die Speicherung, Verwaltung und Abfrage großer Datenmengen in modernen Softwareanwendungen. Sie sind besonders wichtig in interaktiven Systemen wie Webanwendungen, wo Datensicherheit und Datenintegrität kritisch sind.
Datensicherheit in Datenbanken bezieht sich auf Maßnahmen, um Daten vor unbefugtem Zugriff und Missbrauch zu schützen. Datenintegrität in Datenbanken sichert die Korrektheit, Konsistenz und Zuverlässigkeit der Daten während ihrer gesamten Lebensdauer.
Verschiedene Datenbanksysteme bieten unterschiedliche Features, die sie für verschiedene Anwendungsfälle geeignet machen:
MariaDB ist eine beliebte Wahl unter den relationalen Datenbankmanagementsystemen, weil es eine Open-Source-Fortsetzung von MySQL ist und verbesserte Features, Performance und Sicherheit bietet:
Quelle: wikipedia.org
| Feature | Vorteil |
|---|---|
| Open Source | Frei verfügbar, keine Lizenzkosten, große Community-Unterstützung. |
| Performance | Schnelle Verarbeitung großer Datenmengen und optimierte Abfragen. |
| Sicherheit | Fortgeschrittene Verschlüsselungsoptionen und regelmäßige Sicherheitsupdates. |
Quelle: wikipedia.org
PHPMyAdmin ist ein beliebtes Tool für die Verwaltung von MySQL- und MariaDB-Datenbanken über eine Web-Oberfläche. Es ermöglicht Benutzern, Datenbanken, Tabellen, Spalten und Beziehungen einfach über einen Browser zu verwalten. Sie können auf PHPMyAdmin über phpmyadmin.edumake.de zugreifen.
Um eine Verbindung zu einer bestehenden Datenbank herzustellen, benötigen Sie die entsprechenden Zugangsdaten (Benutzername und Passwort) und die Adresse des Datenbankservers. Nach dem Einloggen bei PHPMyAdmin können Sie die Datenbank auswählen, mit der Sie arbeiten möchten, und alle relevanten Datenmanagementaufgaben durchführen.
Quelle: bsz-limbach.com
SQL (Structured Query Language) ist die Sprache, die verwendet wird, um mit Datenbanken zu kommunizieren. Sie ermöglicht Ihnen, Daten zu lesen, zu schreiben, zu aktualisieren und zu löschen. Hier ist ein Beispiel für eine einfache SQL-Abfrage:
SELECT * FROM users WHERE age > 18;
Dieses Beispiel zeigt, wie man alle Benutzer aus der Tabelle 'users' abruft, die älter als 18 Jahre sind.
Wer sich mit Datenbanken oder SQL überhaupt nicht auskennt sollte vielleicht mal hier reinschauen:
Für das Escape-Room-Projekt wird eine Datenbanktabelle verwendet, die folgendermaßen aufgebaut ist:
| Feld | Typ | Beschreibung |
|---|---|---|
| room_id | INT | Ein eindeutiger Primärschlüssel, der jedes Zimmer identifiziert. Wird automatisch erzeugt! |
| puzzle_question | VARCHAR(255) | Die Rätselfrage, die den Spielern gestellt wird. |
| puzzle_answer | VARCHAR(255) | Die Antwort auf das Rätsel. |
| next_room_id | INT | Die ID des nächsten Raumes, zu dem der Spieler nach Lösung des Rätsels gelangt. |
Typen erklärt: INT steht für einen ganzzahligen Wert. VARCHAR(255) bedeutet eine Zeichenkette variabler Länge, die maximal 255 Zeichen enthalten kann.
Überprüfen Sie, ob Ihre Flask-Anwendung korrekt funktioniert, indem Sie sie starten und alle bestehenden Funktionen testen.
source venv/bin/activate
python3 app.py
Danach die Anwendung wieder beenden
Die Datenbanktabelle puzzles ist so strukturiert, dass sie die folgenden Felder umfasst:
Ihr Benutzername für die Datenbank entspricht Ihrem Tandemnamen (z.B. isa1), und das Passwort wird Ihnen von Herrn Müller bereitgestellt.
Der MySQL-Connector ermöglicht es Ihrer Flask-Anwendung, Operationen auf der MariaDB-Datenbank auszuführen. Installieren Sie diesen in Ihrer virtuellen Umgebung:
source venv/bin/activate
pip install mysql-connector-python
Testen Sie die Verbindung zur Datenbank durch Erstellung einer Datei namens testdb.py, die versucht, sich zu verbinden und Daten abzurufen. Ersetzen Sie username und password durch Ihre tatsächlichen Zugangsdaten.
from flask import Flask, jsonify
import mysql.connector
from mysql.connector import Error
app = Flask(__name__)
@app.route('/test_db')
def test_db():
try:
connection = mysql.connector.connect(
host='localhost',
database='escaperoom',
user='username', # Ersetzen durch Ihren Benutzernamen
password='password' # Ersetzen durch Ihr Passwort
)
cursor = connection.cursor()
cursor.execute("SELECT * FROM puzzles;")
results = cursor.fetchall()
return jsonify(results)
except Error as e:
return str(e)
finally:
if connection.is_connected():
cursor.close()
connection.close()
if __name__ == '__main__':
app.run(host='0.0.0.0', port=8001, debug=True)
Um Ihre Flask-Anwendung zu starten, führen Sie die Datei testdb.py aus Ihrem Terminal heraus aus:
python3 testdb.py
Nachdem Sie das Skript gestartet haben, läuft Ihre Flask-Anwendung und hört auf Port 8001 (oder einem anderen Port, je nach Ihrer Konfiguration). Sie können nun Ihre Anwendung im Webbrowser testen.
Öffnen Sie einen Webbrowser und navigieren Sie zur folgenden URL:
http://edumake.de:8001/test_db
Wenn die Anwendung korrekt funktioniert, wird Ihnen eine JSON-Antwort mit den Daten aus Ihrer Datenbanktabelle puzzles angezeigt. Diese Antwort kann leer sein, wenn keine Daten in der Tabelle vorhanden sind, oder sie enthält die Datensätze, die Sie eingefügt haben.
Um die Flask-Anwendung zu beenden, gehen Sie zurück zu Ihrem Terminal. Sie können die Ausführung jederzeit stoppen, indem Sie die folgende Tastenkombination verwenden:
CTRL + C
Dies sendet ein Signal an Ihr Terminal, um den laufenden Prozess zu unterbrechen und die Flask-Anwendung zu beenden.
Bevor Sie mit der Datenbankintegration beginnen, sollten Sie überlegen, ob die bestehende Rätsellogik für die Migration geeignet ist. Komplexe Logiken wie Reihenfolgen oder abhängige Entscheidungen lassen sich möglicherweise nicht direkt in einer einfachen Tabellenstruktur darstellen. In solchen Fällen könnte es sinnvoller sein, einen neuen, einfacheren Escape Room zu erstellen, der speziell für das Testen der Datenbankintegration konzipiert ist. Dieser Ansatz hilft, die Konzepte klar zu vermitteln, ohne durch bestehende Komplexitäten abgelenkt zu werden.
Jedes Rätsel ist individuell, und die Anpassung der Flask-App erfordert sorgfältige Überlegungen zum Routing und zur Logik. Wir empfehlen auch, Ihren Code mit generativen KI-Systemen zu überprüfen, um die Qualität und Sicherheit zu gewährleisten.
Um Ihre existierenden Rätseldaten in die Datenbanktabelle puzzles zu übertragen, verwenden Sie PHPMyAdmin, erreichbar unter phpmyadmin.edumake.de.
In der Datenbanktabelle puzzles wird die room_id automatisch als Primärschlüssel mit der Eigenschaft AUTO_INCREMENT erstellt. Das bedeutet, dass Sie diese ID beim Einfügen neuer Rätsel nicht manuell angeben müssen; sie wird automatisch generiert und hochgezählt.
Ändern Sie Ihren Flask-Code, um die Rätseldaten aus der Datenbank zu beziehen, anstatt sie direkt im Code zu speichern. Dies erhöht die Flexibilität und Skalierbarkeit Ihrer Anwendung.
from flask import Flask, request, jsonify, redirect, render_template
import mysql.connector
app = Flask(__name__)
def get_db_connection():
return mysql.connector.connect(
host='localhost',
database='escaperoom',
user='username',
password='password'
)
@app.route('/puzzle/')
def get_puzzle(room_id):
conn = get_db_connection()
cursor = conn.cursor()
cursor.execute('SELECT question FROM puzzles WHERE room_id = %s', (room_id,))
puzzle = cursor.fetchone()
cursor.close()
conn.close()
if puzzle:
return render_template('puzzle.html', question=puzzle[0], room_id=room_id)
else:
return 'Rätsel nicht gefunden', 404
@app.route('/submit_answer/', methods=['POST'])
def check_answer(room_id):
user_answer = request.form.get('answer', '').strip()
conn = get_db_connection()
cursor = conn.cursor()
cursor.execute('SELECT answer, next_room_id FROM puzzles WHERE room_id = %s', (room_id,))
puzzle = cursor.fetchone()
cursor.close()
conn.close()
if puzzle and user_answer.lower() == puzzle[0].lower():
return redirect(f'/puzzle/{puzzle[1]}') # Weiterleitung zum nächsten Raum
else:
error_message = 'Falsche Antwort, versuchen Sie es erneut!'
return render_template('puzzle.html', error=error_message, room_id=room_id)
# App starten
if __name__ == '__main__':
app.run(host='0.0.0.0', port=8001, debug=True)
Führen Sie Tests durch, um sicherzustellen, dass Ihre Flask-Anwendung korrekt mit der Datenbank interagiert und die Rätsel wie erwartet funktionieren. Testen Sie insbesondere die Benutzererfahrung bei richtigen und falschen Antworten und wie die Weiterleitung zwischen den Rätseln funktioniert.
Die Flask-Anwendung nutzt HTML-Vorlagen (Templates), um Inhalte dynamisch an den Client zu senden. Für die Darstellung der Rätsel benötigen wir eine HTML-Datei, die als Vorlage dient. Diese Vorlage wird verwendet, um Fragen zu präsentieren und Antworten von den Benutzern zu sammeln.
Erstellen Sie eine HTML-Datei namens puzzle.html im Verzeichnis templates Ihrer Flask-Anwendung. Diese Datei enthält das Markup für die Darstellung der Rätsel und ein Formular für die Antwort-Eingabe.
<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="UTF-8">
<title>Rätsel Raum</title>
</head>
<body>
<h1>{{ question }}</h1>
<form action="/submit_answer/{{ room_id }}" method="post">
<input type="text" name="answer" required>
<button type="submit">Antwort einreichen</button>
</form>
{% if error %}
<p style="color:red;">{{ error }}</p>
{% endif %}
</body>
</html>
Nachdem Sie die Flask-Anwendung gestartet haben und die HTML-Vorlage erstellt wurde, ist sie über den Webbrowser erreichbar. Wenn Sie beispielsweise die Flask-Anwendung auf Port 8001 laufen lassen, können Sie das Rätsel durch Eingabe der folgenden URL aufrufen:
http://edumake.de:8001/puzzle/1
Dieser URL-Aufruf lädt die Seite für das Rätsel des ersten Raums. Der Parameter 1 in der URL entspricht der room_id des Rätsels, das Sie anzeigen möchten. Sie können die ID ändern, um andere Rätsel basierend auf ihrer ID in der Datenbank zu laden.
Das Frontend interagiert direkt mit Ihrer Flask-Anwendung, die die Logik enthält, um auf Benutzeraktionen zu reagieren, wie z.B. das Überprüfen einer eingegebenen Antwort und das Weiterleiten zu einem anderen Rätsel, basierend auf der Korrektheit der Antwort.
Das Ziel ist die Entwicklung eines interaktiven Click-Adventures. Sie werden ein Labyrinth gestalten, in dem Nutzer Entscheidungen treffen, die zu verschiedenen Ausgängen führen. Bitte beachten Sie, dass die folgenden Beispiele als Ausgangspunkt dienen und für Ihr spezifisches Labyrinth individuell angepasst werden müssen.
Warum verwenden wir Datenbanken? Datenbanken ermöglichen die dynamische Speicherung und Abfrage von Entscheidungsdaten, was entscheidend für die Implementierung komplexer Logiken in Ihrem Labyrinth ist.
Entwerfen Sie eine Datenbanktabelle, die die Entscheidungspfade für Ihr Labyrinth speichert. Achten Sie darauf, dass der Tabellenname eindeutig ist und nicht mit anderen Namen in Ihrer Datenbank kollidiert.
Besuchen Sie die PHPMyAdmin-Oberfläche unter http://phpmyadmin.edumake.de.
Melden Sie sich mit Ihrem Benutzernamen und dem von Herrn Müller erhaltenen Passwort an.
Wählen Sie links in der Navigation die gewünschte Datenbank aus, in der Sie die neue Tabelle erstellen möchten.
decisions.Geben Sie für jede Spalte den Namen ein und wählen Sie den entsprechenden Datentyp aus. Mögliche Spaltennamen wören:
Klicken Sie auf "Speichern", um die Änderungen zu übernehmen und die Tabelle decisions in Ihrer Datenbank zu erstellen.
Passen Sie Ihre Flask-Anwendung an, um Entscheidungen aus der Datenbank abzurufen und darauf zu reagieren.
Erklärung des Routings: Das Routing in Flask steuert, wie Anfragen an Ihre Anwendung verarbeitet werden. Sie definieren Routen, die angeben, welche Funktion aufgerufen wird, wenn ein bestimmter URL-Pfad angefordert wird.
from flask import Flask, request, jsonify, render_template, redirect
import mysql.connector
app = Flask(__name__)
@app.route('/decision/')
def decision(room_id):
conn = mysql.connector.connect(host='localhost', database='adventure', user='your_username', password='your_password')
cursor = conn.cursor()
cursor.execute('SELECT * FROM decisions WHERE room_id = %s', (room_id,))
decision = cursor.fetchone()
cursor.close()
conn.close()
if decision:
return render_template('decision.html', decision=decision)
else:
return 'Keine Entscheidung gefunden', 404
Entwickeln Sie eine interaktive HTML-Seite, die Entscheidungen anzeigt und Benutzereingaben entgegennimmt.
Beispiel für ein HTML-Frontend: Diese Seite sollte Formulare für die Nutzereingaben enthalten und auf Benutzeraktionen reagieren können.
<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="UTF-8">
<title>Entscheide dein Schicksal</title>
</head>
<body>
<h1>{{ decision.current_decision }}</h1>
<form action="/submit_decision/{{ decision.room_id }}" method="post">
<button name="choice" value="1">{{ decision.choice_1 }}</button>
<button name="choice" value="2">{{ decision.choice_2 }}</button>
</form>
</body>
</html>
Integrieren Sie alle Komponenten und führen Sie umfassende Tests durch, um sicherzustellen, dass das Labyrinth wie erwartet funktioniert.
Auf der nächsten Seite finden Sie ein ausführliches Beispiel mit ausgefüllten Daten als Hilfestellung und zum besseren Verständis!
Dieses Beispiel zeigt, wie die Flask-Anwendung Entscheidungen basierend auf den in der Datenbank gespeicherten Informationen verarbeitet und Nutzer basierend auf ihren Entscheidungen durch das Labyrinth leitet.
Dies ist ein Beispiel und keine fertige Lösung!
Die Tabelle decisions könnte folgende Spalten haben:
room_id: Eindeutige ID für jeden Raum (automatisch generiert).current_decision: Beschreibung der Entscheidungssituation.choice_1: Text für die erste Wahl.choice_1_result: ID des Raumes, zu dem diese Wahl führt.choice_2: Text für die zweite Wahl.choice_2_result: ID des Raumes, zu dem diese Wahl führt.decisionsDiese Tabelle enthält die Daten für die Entscheidungspfade im Labyrinth. Jeder Eintrag repräsentiert eine Entscheidungsstelle im Spiel.
| room_id | current_decision | choice_1 | choice_1_result | choice_2 | choice_2_result |
|---|---|---|---|---|---|
| 1 | Ein dunkler Weg kreuzt Ihren Pfad. Welchen Weg wählen Sie? | Nach links gehen | 2 | Nach rechts gehen | 3 |
| 2 | Sie erreichen eine alte Brücke. Wagen Sie es, zu überqueren? | Brücke überqueren | 4 | Umkehren | 1 |
| 3 | Vor Ihnen steht ein geheimnisvolles Tor. Öffnen Sie es? | Das Tor öffnen | 5 | Weitergehen | 6 |
| 4 | Sie stehen vor einer Gabelung. Rechts führt ein steiler Pfad bergauf, links ein sanfter Weg hinunter. | Steilen Pfad wählen | 7 | Sanften Weg wählen | 8 |
| 5 | Ein kleiner Raum öffnet sich, gefüllt mit leuchtenden Kristallen. Nehmen Sie einen mit? | Kristall nehmen | 9 | Ohne Kristall weitergehen | 10 |
| 6 | Sie stoßen auf eine alte Hütte. Untersuchen Sie sie? | Ja, untersuchen | 11 | Vorbeigehen | 12 |
Diese Tabelle zeigt, wie jede Wahl zu einem neuen Raum führt, der weitere Entscheidungen erfordert, wodurch ein verzweigtes Labyrinth von Pfaden entsteht. Das Design des Labyrinths sollte darauf ausgerichtet sein, ein immersives und interaktives Erlebnis zu bieten.
from flask import Flask, render_template, request, redirect, url_for
import pymysql
app = Flask(__name__)
# Verbindung zur MySQL-Datenbank herstellen
connection = pymysql.connect(host='localhost',
user='user', # Benutzername
password='password', # Ihr Datenbankpasswort hier
database='your_database', # Name Ihrer Datenbank hier
cursorclass=pymysql.cursors.DictCursor)
# Beispiel: Tabelle 'decisions' in der Datenbank
def fetch_decision(room_id):
with connection.cursor() as cursor:
cursor.execute('SELECT * FROM decisions WHERE room_id=%s', (room_id,))
decision = cursor.fetchone()
return decision
@app.route('/')
def index():
# Erste Entscheidung laden
first_decision = fetch_decision(1) # Lade die erste Entscheidung mit room_id 1
return render_template('index.html', decision=first_decision)
@app.route('/decision/', methods=['POST'])
def process_decision(room_id):
choice = request.form['choice']
next_room_id = None
with connection.cursor() as cursor:
cursor.execute('SELECT * FROM decisions WHERE room_id=%s', (room_id,))
current_decision = cursor.fetchone()
if choice == 'choice_1':
next_room_id = current_decision['choice_1_result']
elif choice == 'choice_2':
next_room_id = current_decision['choice_2_result']
else:
return 'Ungültige Wahl'
if next_room_id is None:
return 'Spiel beendet' # Beispiel: Wenn keine weiteren Entscheidungen existieren
next_decision = fetch_decision(next_room_id)
return render_template('index.html', decision=next_decision)
if __name__ == '__main__':
app.run(host='0.0.0.0', port=8000, debug=True)
# Verbindung zur Datenbank schließen
connection.close()
decisions enthält.
room_id aus der Datenbank abzurufen.
room_id 1 und rendert die index.html Vorlage mit dieser Entscheidung.
choice_1 oder choice_2) wird die nächste room_id aus der Datenbank abgerufen. Wenn keine weiteren Entscheidungen existieren (d.h. next_room_id ist None), könnte hier eine Endanzeige oder eine spezifische Nachricht gerendert werden.
render_template) für die Darstellung der Entscheidungen in der HTML-Datei (index.html). Diese Vorlage könnte dynamisch die aktuelle Entscheidung anzeigen und ein Formular für die Benutzerwahl bereitstellen.
Dieses Beispiel demonstriert, wie Sie die Entscheidungen dynamisch verwalten können, basierend auf den Einträgen in Ihrer MySQL-Datenbanktabelle decisions. Stellen Sie sicher, dass Ihre Datenbankverbindung sicher und Ihre Abfragen gegen SQL-Injektionen geschützt sind, insbesondere wenn die Anwendung live verwendet wird.
Das HTML-Frontend, das die Entscheidungspfade des Labyrinths darstellt und die Benutzerinteraktion ermöglicht.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Click-Adventure Labyrinth</title>
<style>
/* Stile für das Labyrinth hier anpassen */
</style>
</head>
<body>
<h1>Click-Adventure Labyrinth</h1>
<div id="labyrinth">
{% for decision in decisions %}
<div id="room-{{ decision.room_id }}" class="room">
<p>{{ decision.current_decision }}</p>
<form action="/decision/{{ decision.room_id }}" method="post">
<button type="submit" name="choice" value="choice_1">{{ decision.choice_1 }}</button>
<button type="submit" name="choice" value="choice_2">{{ decision.choice_2 }}</button>
</form>
</div>
{% endfor %}
</div>
<script>
// JavaScript für zusätzliche Interaktivität hier hinzufügen
</script>
</body>
</html>
Diese HTML-Vorlage zeigt, wie Entscheidungen im Labyrinth dargestellt und verarbeitet werden können. Die Entscheidungsinformationen werden dynamisch über die Flask-Anwendung eingefügt, wobei `decision['current_decision']`, `decision['choice_1']` und `decision['choice_2']` die jeweiligen Inhalte aus der Datenbank-Tabelle darstellen.
Dieses Beispiel veranschaulicht, wie Flask für die Steuerung eines Click-Adventure-Labyrinths verwendet werden kann, indem es dynamische Entscheidungspfade und die Interaktion mit dem Benutzer über HTML-Formulare ermöglicht.