Der Speicher String
Der Storage String


Manchmal musst Du Informationen speichern, die nach dem Neuladen oder Herunterfahren des Spiels oder die Neukompilierung Deines Skripts noch(mal) vorhanden sind. Das Grid-Programm selbst bietet derzeit nur eine Möglichkeit das zu tun: Die Storage-Eigenschaft. Diese Eigenschaft befindet sich in der Basisklasse MyGridProgram Deines Skripts und kann daher von jeder Methode oder Eigenschaft in Deinem Skript aus aufgerufen werden - aber nicht direkt von einer Unterklasse (siehe Dir im Abschnitt "Das Grid Terminal System und Unterklassen" eine Möglichkeit an, dieses Problem zu umgehen).

Die Storage-Eigenschaft ist ein simples String-Property:

public void Save()
{
    Storage = "Mein Text";
}

Wie Du sehen kannst gibt es hier nichts wirklich Besonderes bei der Anwendung. Der Unterschied zwischen dieser Eigenschaft und jeder anderen ist die Tatsache, dass ihr Inhalt beim Speichern des Spiels auf Deiner Festplatte gespeichert wird.

Aber was ist zu tun wenn man etwas Komplexeres speichern will? Die absolut einfachste Art, mehrere Werte im Storage zu speichern, ist die Verwendung von String-Verkettung oder string.Join zum Speichern und string.Split zum Laden.

Ich empfehle Dir, Program() zu verwenden, um den Storage zu lesen, und Save(), um in ihn zu schreiben.

string _someTextDescription;
int _someImportantNumber;

public Program() 
{
    // Splitte den Storage String bei den Semikolons
    string[] storedData = Storage.Split(';');
    // Wenn mindesten ein Item im Storage ist...
    if (storedData.Length >= 1)
    {
        // Erhalte das erste Item. C#-Arrays Indizier bneginnen bei 0, was bedeutet das erste Item ist unter dem Index 0 erreichbar
        _someTextDescription = storedData[0];
    }

    // Wenn mindestens 2 Items im Storage sind...
    if (storedData.Length >= 2)
    {
        // Erhalte das zweite item, diesesmal wollen wir es in einen Zahlenwert konvertieren
        int.TryParse(storedData[1], out _someImportantNumber);
    }
}

public void Save()
{
    // Kombiniere die Variablen als String die durch Semikolons unterteilt sind
    Storage = string.Join(";",
        _someTextDescription ?? "",
        _someImportantNumber
    );
}

Beachte die Verwendung von int.TryParse im Program(). Das wird verwendet, weil es immer mal möglich ist, dass uns beim Speichern ein Fehler unterläuft. Um hier keinen Error zu produzieren gehen wir Besser auf Nummer sicher.

Außerdem solltest Du daran denken den Null-Conditional-Operator ?? in die Zeile 27 mit _someTextDescription aufnehmen. Das fängt den Fall ab, wenn das Feld null wäre. Dann speichern wir lediglich eine leere Zeichenkette ab.

Für die meisten kleineren Skripte sollte diese Art des speicherns aber ausreichen. Für komplexere Anwendungsfälle kannst Du Dir auch das Kapitel "Persistentes speichern von komplexeren Daten" anschauen.