Spiele Map in Datei speichern

Raven280438

Erfahrenes Mitglied
Hi,

ich bin noch ziemlicher Anfänger in C++ ;)

Ich bin dabei ein Spiel zu programmieren. Es ist ein 2D RPG.
Die Maps werden als sog. "Tile Based Maps" im Programm gespeichert.
Im Moment stehn die Maps fest als Array im Programmcode drin.
Um das Ganze etwas flexibler zu gestalten will ich die Karteninformationen (Tiles-Array, Breite/Höhe, benutzte Hintergrund Bitmaps, usw.) in einer Datei speichern.

In welchem Format kann ich das am einfachsten in einer Datei speichern, um es dann im Programm auszulesen?
Geht sowas mit XML? Mein Problem ist, dass ich keinen richtigen XML-Parser für C++ gefunden habe. Hat jemand einen guten Parser für mich, oder bietet sich ein anderes Dateiformat hier besser an?


Gruß
 
Für XML gibts tinyXml. Ist denn dein Mapformat eher binär ausgerichtet oder "textbasiert"? Also was ist zum Beispiel das "Tiles-Array"? Bei XML ist es halt immer so, dass du recht viel zusätzliche Sachen in der Datei hast, die unter Umständen gar nie benötigst, wenn nicht vor hast das schön für den User ausserhalb lesbar zu machen.
 
Hi,

im Moment besteht das Tiles Array einfach aus einem char, der den Tile-Typ representiert.
Ich will dass aber weiter ausbaun, dass für jede Tile mehrere Informationen gespeichert werden. z.B. Welche Bitmap in der Tile angezeigt werden soll, ob die Tile begehbar ist, ob auf der Tile kämpfe stattfinden können usw.
Ich dachte mir, dass ich für jede dieser Informationen einen String aus int-Werten speichere, die einfach mit einem Leerzeichen getrennte Werte enthält.

Das TinyXML hab ich mir mal runtergeladen, werde aber nicht so richtig schlau daraus. Muss ich dazu die tinyxml.h, tinyxml.cpp, tinystr.cpp und tinystr.h ins Projekt einbinden, oder gibts irgendwo ne lib zum einbinden?


Gruß
 
Hi

lege dir eine ganz normale *.txt Datei an.
Dadrin speicherst du die Tiles, mit Komma getrennt. Jede Zeile steht für eine weitere y-Koordinate:
Code:
tile1, tile2, tile3, tile4
tile5, tile6, tile7, tile8
tile9, tile10, tile11, tile12
tile13, tile14, tile15, tile16
tile1 wäre die Kachel an Koordinate 0,0.
 
Hi,

ich würde aber auch gerne andere Werte für die Map in der Datei speichern.
Z.B. Höhe und Breite, verwendete Bitmaps für die Map, Begehbarkeit usw.
Da eignet sich eine txt-Datei warscheinlich nicht so richtig dafür.

XML wäre sicher ne Idee, aber ich komm mit dem tinyXML nich so richtig klar ;)
Kann mir jemand sagen wie ich das am besten ins Programm einbinde? Einfach die tinyxml.h, tinyxml.cpp, tinystr.cpp und tinystr.h ins Projekt einbinden oder noch was anderes? Bin grad nicht zuhause und kanns nicht selber testen ;)


Gruß
 
Auch dafür eignet sich eine txt Datei

Code:
width=600
height=400
tile01-Data, tile02-Data

Data könnte z.B. so aussehen:
1 = Begehbar
2 = Nicht begehbar
4 = Holzsound
8 = Metalsound
16 = ManaRegeneration

Dann addierst du die einzelnen Werte: 1+4+16 = 21;
Um zu überprüfen was anliegt, einfach mit if abfragen:
C++:
if( data&4 ){
  //Holzsound
}
 
Worauf ich grundsätzlich hinaus wollte war folgendes:
Was für ein Format du verwendest hängt strak vom Inhalt ab, den du speichern willst. Möchtest du beispielsweise ein 512x512 Array von float-Werten mit Kollisionspunkten abspeichern, so empfiehlt sich ein binäres Format eher als ein textbasiertes. Allerdings denke ich, dass bei deinen Daten zum Beispiel XML gar nicht schlecht ist, da es dem User, der dein Spiel verwendet sozusagen auch aufklärt, was da alles so drin steht und er es auch erweitern kann. Du musst dir natürlich auch überlegen, wie es in Zukunft aussehen wird. Grundsätzlich ist es nämlich so, dass du in einem binären Format alle Informationen für das Programm übersichtlich unterbringen kannst, bei textbasierten wirds recht schnell unübersichtlich, instabil und unsauber.
 

Neue Beiträge

Zurück