2016-04-06 7 views
-6

Ich versuche ein RPG mit C++ zu erstellen, für jetzt nur ein Text-RPG. Ich möchte viele Instanzen der Klasse "Monster" erstellen. Sagen wir, ich muss 100 Monster machen (Goblins, Oger, Drachen usw.), wie soll ich diese speichern? Sollte ich eine separate Datei zum Speichern von Klasseninstanzen haben und wenn ja, wie? Ich möchte sie alle in einer einzigen Datei haben, damit sie nirgends Platz findet.Speichern von Klasseninstanzen in einer Datei

Antwort

1

Sie können die Klasse in einer binary Datei speichern und write und read verwenden.

Vielleicht ist das, was Sie tun möchten, hier ist ein einfaches Beispiel.
Lassen Sie uns sagen, dass wir diese Klasse haben:

class Goblin { 
public: 
    int health; 
    int damage; 
}; 

Und eine Datei schreiben zu:

fstream file("record.bin", ios::trunc | ios::binary | ios::in | ios::out); 

Jetzt können wir ein Goblin-Objekt erstellen:

Goblin my_goblin; 
my_goblin.health = 100; 
my_goblin.damage = 50; 

und dann können wir schreibe die Daten in die Binärdatei:

file.write(reinterpret_cast<char*>(&my_goblin.health), sizeof(my_goblin.health)); 
file.write(reinterpret_cast<char*>(&my_goblin.damage), sizeof(my_goblin.damage)); 

Nach dem Ausführen enthält die Binärdatei Daten über Ihre Goblin Klasse.


nun zum Lesen der Daten, die Sie wollen nicht die ios::trunc Flagge dort:

fstream file("record.bin", ios::binary | ios::in | ios::out); 

Wir schaffen ein Goblin Objekt wieder:

Goblin goblin; 

Und dann können wir Daten lesen in unsere Klasse:

if (!file.read(reinterpret_cast<char*>(&goblin.health), sizeof(goblin.health))) { 
    // handle error 
} 
if (!file.read(reinterpret_cast<char*>(&goblin.damage), sizeof(goblin.damage))) { 
    // handle error 
} 

Jetzt sehen drucken, wenn es funktioniert:

// Output result if all went well 
cout << "Goblin health = " << goblin.health << '\n'; 
cout << "Goblin damage = " << goblin.damage << '\n'; 

Ausgang:

Goblin health = 100 
Goblin damage = 50 

Das ist wirklich nicht nötig ist!

Um ein textbasiertes Spiel zu erstellen, benötigen Sie nicht den obigen Ansatz. Schreiben Sie einfach Ihre Klassen und bewahren Sie sie in den Header-Dateien auf. Separate Deklaration von der Implementierung.

Ex: Goblin.h, Goblin.cpp, Dragon.h, Dragon.cpp usw.

+0

Danke für das detaillierte Beispiel, werde ich wahrscheinlich nur in Header-Dateien speichern, obwohl Sie vorgeschlagen, Danke! – Joe

0

Sie können Instanzen von Objekten in Dateien speichern, das heißt Serialisierung, und es gibt eine Reihe von Möglichkeiten, um es zu erreichen, ich schlage mehr Forschung in dieser Richtung.

Ich glaube, dass Sie dies für Ihr Programm nicht tun müssen, da es wahrscheinlich genug Platz geben wird, um alle Ihre Monster zu speichern, und dann einige.

+0

Okay, danke für den Rat, werde ich einige der Forschung in die Serialisierung tun und sehen, was es geht um alles. – Joe

Verwandte Themen