Aus Das deutschsprachige Scratch-Wiki
Beim Daten speichern werden eine Variable oder eine Liste in einem Scratch Projekt dazu genutzt, Informationen aus dem Projekt zu sichern, um sie zu einem späteren Zeitpunkt wieder verwenden zu können.
Solche Daten können zum Beispiel Spielstände oder Einstellungen sein, welche man gerne später noch einmal verwenden oder mit anderen teilen möchte.
Daten in Variablen speichern
Will man jetzt aber z.B. seine Spieldaten, die in einer Liste vorhanden sind in einer Variable speichern, dann muss man halt eine andere Methode wählen. Wie man das dann macht, das steht, bzw. lässt sich hier finden.
Daten in Listen speichern
Schon seit Scratch 1.3 können Daten in Listen gespeichert und von dort in der Bearbeiten-Ansicht mit Rechtsklick auch in einer Textdatei auf dem eigenen Rechner gespeichert werden.
Vorteile
Die Möglichkeit, Spielstände und andere Daten zu speichern und zu laden kann aus vielen Gründen nützlich sein:
- Ein Spiel kann unterbrochen und später an derselben Stelle fortgesetzt werden.
- Jeder kann eigene Spiel-Elemente (z.B. Karten) erstellen und in das Spiel einbauen.
- Entwickler können ihre Projekte leichter anpassen und erweitern.
- Spieler können Spiel-Vorgaben einfacher nach ihren Wünschen anpassen
Nachteile
Obwohl die Speicher- und Lade-Funktion sehr nützlich ist, kann sie auch Probleme verursachen:
- Falls die Skripte nicht gut geschrieben sind, kann das Laden von Daten zu unerwarteten Ergebnissen und zu Programmfehlern führen.
- Spieler können die gespeicherten Daten verändern und Spiele auf diese Art "hacken".
- Spieler können Spiele auf eine Art verändern, die vom Entwickler nicht gewünscht ist.
- Unerfahrene Spieler könnten die Speicher-Funktion nicht verstehen und das Projekt deshalb zu kompliziert finden.
Probleme vermeiden
Einige der oben genannten Nachteile können durch gute Vorbereitung vermieden werden:
- Teste die Lade- und Speicherfunktion oft und gründlich, und stelle sicher, dass sie in jeder Situation des Spiels funktioniert.
- Lasse dein Skript vor dem Laden prüfen, ob die Daten in Ordnung sind, also zum Beispiel die richtige Länge haben und an den richtigen Stellen Zahlen stehen.
- Erkläre den Nutzern ausführlich, wie das Laden und Speichern in deinem Projekt funktioniert, und was sie tun müssen.
- Lade und speichere deine Daten "verschlüsselt", um das Hacken zu erschweren, außerdem kannst Du eingegebene Codes auf ihre Gültigkeit untersuchen und ungültige Codes ignorieren, so dass ein eventueller Hacker den Aufbau des Codes genau verstanden haben muss.
Anleitung
Mit den folgenden Skripten kannst du auf einfache Art Werte in Listen speichern und wieder laden.
Sämtliche Daten werden in einer einzigen Textvariablen gespeichert, welche später wieder ins Projekt geladen werden werden kann.
Zunächst brauchst du eine Liste für die zu speichernden Werte. Im folgenden Beispiel heißt sie „Speicherdaten“. Danach kannst du mit einem eigenem Block deine Daten in diese Liste schreiben:
Definiere speichere (Wert) füge (verbinde (Wert) und [;]) zu [Speicherdaten v] hinzu
Jetzt kannst du mit einem Skript beliebige Werte zur Speicherdaten-Liste hinzufügen:
speichere (x-Position) :: custom speichere (Leben) :: custom speichere (Gold) :: custom
Als nächstes gibst du den Speichercode an den Nutzer weiter. Dazu legst du zunächst eine Variable namens „Code“ an. Wenn der Spieler dann zum Beispiel die „s“-Taste drückt, schreibst du alle Werte der Speicherdaten-Liste in die Code-Variable, ersetzt die gesamte Liste durch den Code und zeigst sie dem Nutzer, damit er den Wert kopieren kann. Das gesamte Speicher-Skript kann dann zum Beispiel so aussehen:
Wenn Taste [s v] gedrückt lösche (alles v) aus [Speicherdaten v] speichere (x-Position) :: custom speichere (Leben) :: custom speichere (Gold) :: custom setze [Code v] auf [] //Die Code-Variable muss am Anfang komplett leer sein wiederhole bis <(Länge von [Speicherdaten v]) = [0]> setze [code v] auf (verbinde (code) (Element (1 v) von [Speicherdaten v])) lösche (1 v) aus [Speicherdaten v] end füge (code) zu [Speicherdaten v] hinzu zeige Liste [Speicherdaten v]
Der Nutzer kann den Code dann kopieren oder die Liste exportieren und auf seinem Rechner speichern.
Jetzt muss der Nutzer die Daten nur noch wieder laden können. Lege eine Variable „Zeichen-Zähler“ an, eine Variable "Aktueller Wert", und dazu den folgenden Block:
Definiere lade (Daten) lösche (alles v) aus [Speicherdaten v] setze [Zeichen-Zähler v] auf [1] wiederhole bis <(Zeichen-Zähler) > (Länge von (Daten))> setze [Aktueller Wert v] auf [] //Stelle sicher, dass der Wert zunächst leer ist wiederhole bis <(Zeichen (Zeichen-Zähler) von (Daten)) = [;]> setze [Aktueller Wert v] auf (verbinde (Aktueller Wert) (Zeichen (Zeichen-Zähler) von (Daten))) ändere [Zeichen-Zähler v] um (1) end füge (Aktueller Wert) zu [Speicherdaten v] hinzu ändere [Zeichen-Zähler v] um (1) end
Jetzt kannst du die gespeicherten Daten in derselben Reihenfolge auch wieder laden. Zuerst fragst du den Nutzer nach seinem Speichercode, dann lädst du die Daten, und dann speicherst du sie wieder in den ursprünglichen Variablen, also zum Beispiel als x-Position, als Leben und als Gold. Das Skript dafür kann zum Beispiel so aussehen:
Wenn Taste [l v] gedrückt frage [Speichercode?] und warte lade (Antwort) :: custom setze x auf (Element (1 v) von [Speicherdaten v]) setze [Leben v] auf (Element (2 v) von [Speicherdaten v]) setze [Gold v] auf (Element (3 v) von [Speicherdaten v])
[wiki=de:Daten speichern]Daten speichern[/wiki]