Es gibt wahrscheinlich eine Vielzahl von Möglichkeiten, dies zu tun, aber das Einfachste, was ich persönlich und beruflich immer gefunden und angewendet habe, ist, eine Struktur zu erstellen, die alle Werte enthält, die ich speichern möchte.
struct SaveGameData
{
int characterLevel; // Any straight up values from the player
int inventoryCount; // Number of items the player has on them or stored or what not
int[STAT_COUNT] statistics; // This is usually a constant size (I am tracking X number of stats)
// etc
}
struct Item
{
int itemTypeId;
int Durability; // also used as a 'uses' count for potions and the like
int strength; // damage of a weapon, protection of armor, effectiveness of a potion
// etc
}
Ich schreibe / verteile dann einfach die Daten in und aus einer Datei unter Verwendung der grundlegenden Datei-E / A-Werte. Die Inventaranzahl ist die Anzahl der Artikelstrukturen, die nach der SaveGameData-Hauptstruktur in der Datei gespeichert werden, sodass ich weiß, wie viele davon nach dem Abrufen dieser Daten gelesen werden müssen. Der Schlüssel hier ist, dass wenn ich etwas Neues speichern möchte, es sei denn, es handelt sich um eine Liste von Elementen oder dergleichen, alles, was ich jemals tun musste, ist, der Struktur irgendwo einen Wert hinzuzufügen. Wenn es sich um eine Liste von Elementen handelt, muss ich einen Lesezugriff hinzufügen, wie ich es bereits für die Elementobjekte impliziert habe, einen Zähler im Hauptkopf und dann die Einträge.
Dies hat den Nachteil, dass verschiedene Versionen einer Sicherungsdatei ohne besondere Behandlung inkompatibel sind (auch wenn es sich nur um Standardwerte für jeden Eintrag in der Hauptstruktur handelt). Insgesamt lässt sich das System jedoch problemlos erweitern, indem lediglich ein neuer Datenwert hinzugefügt und bei Bedarf ein Wert hinzugefügt wird.
Auch hier gibt es einige Möglichkeiten, um dies zu tun, und dies könnte mehr zu C als zu C ++ führen, aber es hat die Arbeit erledigt!