So erstellen Sie ein Spieledateiformat in C ++ mit STL

7

Hey, ich habe gerade etwas über den I / O-Teil der STL gelernt, genauer gesagt über Fstream. Obwohl ich jetzt binäre Informationen und Klassen, die ich erstellt habe, auf der Festplatte speichern kann, bin ich mir nicht sicher, wie ich definieren soll, wie die Informationen gelesen werden sollen.

Ich habe die Antwort für das Erstellen eines Dateiformats aus [diesem] [1] Beitrag gesehen:

In der Regel definieren Sie viele Datensätze / Strukturen, z. B. BITMAPINFOHEADER, und geben an, in welcher Reihenfolge sie kommen sollen, wie sie eingebettet werden sollen, und Sie müssen möglicherweise viele Angaben und Nachschlagetabellen schreiben. Solche Dateien bestehen aus einer Reihe von Datensätzen (möglicherweise eingebettet), Nachschlagetabellen, magischen Wörtern (Beginn der Struktur, Ende der Struktur usw.) und Zeichenfolgen in einem benutzerdefinierten Format.

Was ich speziell wissen möchte, ist, wie man das mit STL und C ++ macht ... Da das Format nur für die Verwendung eines Spiels gedacht ist, würde ich denken, dass es viel einfacher wäre. Das Format sollte:

  • Sei durchquerbar (ich kann es durchsehen und den Anfang der Struktur finden und vielleicht den Namen überprüfen
  • Sie können mehrere Klassen und Daten in einer einzigen Datei speichern
  • identifizierbare Start- und Endpunkte für Abschnitte haben: z. B. den Platz in Textdateien
  • Vielleicht haben Sie ein eigenes Symbol, um es darzustellen?

Wie mache ich das in c ++?

Greif
quelle
4
Ich denke auch, dass die Frage, wie das Dateiformat erstellt werden soll, eine Fehlzündung ist. Das Dateiformat ist das, was Sie auf die Festplatte schreiben. Und wenn Sie wissen, wie Sie es auf die Festplatte geschrieben haben, können Sie wahrscheinlich herausfinden, wie Sie es zurücklesen können. Der Grund, warum Sie das Dateiformat definieren würden, ist, dass Personen ohne Ihren Code die Datei lesen können, aber Sie müssen dies wahrscheinlich nicht tun.
Tetrad

Antworten:

9

versuchen Sie es mit Boost Serialize ! Abgesehen davon fragen Sie nach der Implementierung der Serialisierung, und das ist eine wirklich komplizierte Sache! Ich habe kürzlich eine Implementierung für die Serialisierung implementiert und es ist kein einfacher Fall, darüber zu sprechen.

Es gibt auch eine andere Möglichkeit, nur eine Klasse in einer Datei zu speichern, die alle benötigten Informationen enthält, wodurch das Speichern / Laden von Klassen viel einfacher wird.

Übrigens hat das Symbol nichts mit dem Dateiformat zu tun, es wird vom Betriebssystem pro Datei generiert, und normalerweise werden Symbole irgendwo zwischen den Betriebssystemdateien gespeichert. außer für ausführbare Windows-Dateien (soweit ich weiß). Ausführbare Windows-Dateien sind wie ein komprimierter Ordner, der die eigentlichen Binäroperationen, Symboldaten für verschiedene Auflösungen und möglicherweise einige andere Daten zum Betriebssystem selbst enthält.

Ali1S232
quelle
-1, was er sucht, ist nicht streng Serialisierung. +1 für die Erwähnung von Symbolen beziehen sich auf das Betriebssystem.
Verlangsamte
@danien: Soweit ich aus seiner Frage ersehen kann, sucht er nach einer Möglichkeit, alle seine Klassen zu sichern und sie nach dem Neustart des Programms in den exakt gleichen Zustand zu laden. das ist serialisierung! Beachten Sie, dass er mehrere Klassen und Daten in einer einzigen Datei speichern möchte .
Ali1S232
2
Es scheint mir wirklich eine "grundlegende Programmierfrage" zu sein: zu wissen, wie man Daten in verschiedene Formate oder Strukturen konvertiert (oder serialisiert, wenn man so will), bevor man sie in eine Datei oder einen anderen Stream schreibt. Chunks können verwendet werden, um Hierarchien hinzuzufügen, ansonsten ist es nur eine Frage des Experimentierens, denke ich. Keine todsichere Antwort darauf.
NJDW