Aufbau eines SQL-Spiels

Ein SQL-Spiel verbindet eine Datenbank mit einer Geschichte und SQL-Aufgaben. Es enthält einen Spielnamen, einen kurzen Teaser, einen Copyright-Hinweis, die Ausgangsdatenbank und mindestens eine Spielszene. Wie du diese Inhalte anlegst, bearbeitest und speicherst, erklärt das Handbuch zum SQL-Spieleeditor.

Spieldatei

Der Spieleeditor speichert Spiele als .xml-Datei. Darin sind auch Datenbank und Bilder eingebettet; zum Spielen in der SQL-Spielekonsole genügt diese eine Datei. Spiele können außerdem als .eskuelgame-Paket mit zusätzlichen Angaben zu Herkunft und Lizenzierung vorliegen.

Ein geöffnetes .eskuelgame-Paket wird im Editor in eine bearbeitbare XML-Spieldatei umgewandelt. Beim Speichern oder Exportieren bleiben Paketmetadaten und enthaltene Lizenzdateien nicht erhalten. Über Lizenzen im Importhinweis kannst du sie einsehen; bewahre benötigte Herkunfts- und Lizenzangaben beim Weitergeben gesondert auf.

Datenbank

Die Ausgangsdatenbank legt fest, mit welchen Tabellen und Daten das Spiel beginnt. Der Editor unterstützt SQL-Skripte (.sql) für SQLite und PostgreSQL, binäre SQLite-Datenbankdateien (zum Beispiel .db oder .sqlite) und Eskuel-Datenbankpakete (.eskueldb). Die geladene Datenbank wird in die Spieldatei eingebettet. Änderungen im Spielverlauf werden durch die SQL-Lösungen von Manipulationsszenen beschrieben.

Beispiele findest du in der Datenbanksammlung. Das Handbuch zum SQL-Browser erklärt die unterstützten Formate und die Metadaten, die ein eigenes PostgreSQL-Skript benötigt.

Spielszenen

Die Szenen bilden die Geschichte in ihrer Spielreihenfolge ab. Es gibt vier Szenentypen: Text, Bild, SELECT-Abfrage und Manipulation. Die folgenden Beispiele zeigen ihre Darstellung im Spieleeditor.

Textszene

Eine Textszene erzählt die Geschichte oder erklärt etwas. In der Spielekonsole geht es mit Weiter zur nächsten Szene. Der Text kann einfache Formatierungen enthalten.

Textszene im SQL-Spieleeditor

Bildszene

Eine Bildszene zeigt ein über Bild öffnen geladenes Bild. Unterstützt werden PNG, JPEG, WebP, AVIF und GIF. Auch hier führt Weiter zur nächsten Szene.

Große statische Bilder werden beim Einfügen bei Bedarf automatisch verkleinert. Animierte Bilder, die die Grenzwerte überschreiten, musst du vorher selbst verkleinern. Bilder und Datenbank beeinflussen die Größe der Spieldatei: Nähert sie sich der zulässigen Grenze, zeigt der Editor eine Schätzung an. Oberhalb der Grenze müssen die Inhalte vor dem Speichern oder Exportieren verkleinert werden.

Bildszene mit einem Schulgebäude im SQL-Spieleeditor

SELECT-Abfrage

Eine SELECT-Aufgabe enthält einen Aufgabentext und eine SQL-Lösung. Beim Spielen wird das Ergebnis der eingegebenen Abfrage mit dem Ergebnis dieser Musterlösung verglichen. Entscheidend ist das Ergebnis, nicht der Wortlaut der SQL-Anweisung; auch andere Lösungswege können richtig sein.

Optional kannst du einen Platzhalter für die Eingabe in das Abfragefeld vorgeben, zum Beispiel SELECT ... FROM passwoerter. Drei Optionen bestimmen, wie genau die Ergebnistabellen übereinstimmen müssen. Standardmäßig sind sie deaktiviert:

Option Wann aktivieren?
Zeilen: Reihenfolge für die Lösung relevant? Wenn eine bestimmte Sortierung verlangt wird, etwa mit ORDER BY.
Spalten: Reihenfolge für die Lösung relevant? Wenn die Spalten in einer bestimmten Reihenfolge erscheinen sollen.
Spalten: Bezeichnungen für die Lösung relevant? Wenn bestimmte Spaltennamen oder Aliasse verlangt werden, etwa mit AS.

SELECT-Aufgabe mit SQL-Lösung und Ergebnistipp im SQL-Spieleeditor

Manipulationsszene

Eine Manipulationsaufgabe fordert eine Änderung der Datenbank, zum Beispiel mit INSERT, UPDATE oder DELETE. Sie enthält einen Aufgabentext, eine SQL-Lösung für die gewünschte Änderung und eine SQL-Prüfabfrage. Ein Platzhalter für das SQL-Feld ist auch hier möglich.

Die Prüfabfrage liest den Zustand aus, an dem eine richtige Änderung erkannt wird. Die Spielekonsole vergleicht ihr Ergebnis nach dem Lösungsversuch mit dem Ergebnis nach der Musterlösung. Wähle die Prüfung so, dass auch unerwünschte Änderungen an anderen betroffenen Zeilen oder Spalten sichtbar werden. Wurde beispielsweise eine Tabelle geändert, kann SELECT * FROM inventar deren vollständigen Inhalt prüfen. Eine Abfrage, die nur einen einzelnen Zielwert ausliest, kann Nebenwirkungen übersehen.

Beim Testen im Editor muss die Prüfabfrage vor und nach der Musterlösung unterschiedliche Ergebnisse liefern. Die Meldung Die SQL-Prüfabfrage bezeugt keine durch die SQL-Lösung hervorgerufene Änderung bedeutet, dass sie keine Änderung nachweist. Überprüfe dann die Ausgangsdaten, die Lösung und die Prüfabfrage.

In der Spielekonsole lässt sich die Datenbank auf den zur aktuellen Szene passenden Zustand zurücksetzen, wenn SQL-Versuche sie unbrauchbar gemacht haben. Der Aufgabenfortschritt bleibt dabei erhalten.

Manipulationsaufgabe mit SQL-Lösung und SQL-Prüfabfrage im SQL-Spieleeditor

Tipps und Musterlösung

Für SELECT- und Manipulationsaufgaben kannst du im Szenendialog unter Tipps Hilfen ergänzen:

  • Text: Fügt einen frei formulierten Texttipp hinzu. Mehrere Tipps können schrittweise weiterhelfen.
  • Erwartetes Ergebnis: Zeigt die gesuchte Ergebnistabelle. Bei einer Manipulation werden die Prüfabfrage und ihr erwartetes Ergebnis nach der richtigen Änderung angezeigt. Diese Hilfe lässt sich einmal pro Aufgabe hinzufügen.
  • Musterlösung: Ergänzt die abschließende Hilfe Musterlösung anwenden. Beim Spielen erscheint dafür nach den übrigen Tipps Lösung anzeigen. Sie zeigt die SQL-Lösung und markiert die Aufgabe als mithilfe des Lösungstipps gelöst.

Texttipps und den Tipp zum erwarteten Ergebnis kannst du per Drag & Drop umordnen und einzeln löschen. Diese Reihenfolge bestimmt, wie sie beim Spielen angeboten werden; die Musterlösung steht immer am Ende. Nach einer selbst gelösten Aufgabe ist die Musterlösung auch ohne diesen Lösungstipp zum Vergleich verfügbar.

Textformatierung

Szenentexte und Texttipps unterstützen einfache Formatierungen, die in der Editorvorschau und in der Spielekonsole erscheinen:

  • `SELECT * FROM inventar` zeigt SQL-Code mit Syntaxhervorhebung.
  • *kursiv* zeigt kursiven Text.
  • **fett** zeigt fetten Text.

Zeilenumbrüche und Leerzeilen bleiben erhalten. Überschriften, Listen, Links und HTML werden nicht als Formatierung interpretiert. Setze einen Backslash vor einen Stern oder Backtick, wenn er wörtlich erscheinen soll, zum Beispiel \*Stern\*.