Map Datei lesen



  • es gibt im Internet genügend XML Parser. Die sind auch so gebaut, dass du damit beliebige xml-Dokumente lesen kannst(ohne vorher die Struktur kennen zu müssen).
    http://lars.ruoff.free.fr/xmlcpp/

    Ich hab bisher noch keine verwendet, deshalb kann ich keine empfehlungen aussprechen.



  • DerBaer schrieb:

    xml?

    yeah, da kommt der elefant und macht die mücke platt 😃



  • no_code schrieb:

    DerBaer schrieb:

    xml?

    yeah, da kommt der elefant und macht die mücke platt 😃

    dann mach doch nen besseren Vorschlag, dass es
    * leicht lesbar
    * leicht auszulesen ist

    Ich weiß das xml etwas umfangreich ist, aber halt shön übersichtlich und bei steigender Programmkomplexität auch immer effektiver...



  • evtl. mit der guten alten csv?

    solid,collisiontyp\n
    solid,collisiontyp\n
    solid,collisiontyp\n
    solid,collisiontyp\n
    solid,collisiontyp\n
    

    DerBaer schrieb:

    und bei steigender Programmkomplexität auch immer effektiver...

    das halte ich mal für ein gerücht. wie soll etwas immer effektiver werden? oder meinst du den workflow?



  • 1,rechteck
    1,steigung,links,45
    2,steigung,links,30
    3,rechteck
    4,steigung,oben,17
    3,steigung,unten,76
    

    dann kommen vllt noch extras drauf:

    1,rechteck,HausA(rot)
    1,steigung,links,45,BaumA
    2,steigung,links,30
    3,rechteck,BaumC,Schlange(10HP, blau, o)
    4,steigung,oben,17,HausB(grün)
    3,steigung,unten,76
    

    Ich will nicht sagen xml ist toll aber ich hasse es wenn bei mir solche dateien entstehen...

    PS. effektiver im vergleich zu cvs



  • DerBaer schrieb:

    PS. effektiver im vergleich zu cvs

    erklär mal wieso 🙄



  • naja wenn du cvs parst, hast du:

    if (value[0] == "rechteck") {
        typ = 0;
        continue;
    } else if (value[0] == "schief") {
        typ = 1;
        steigung = value[1];
        if (value[2] == ...
        }
    }
    

    in xml machste einmal den parsealgo und der geht für beliebig komplexe strukturen und erzeugt nen simplen baum

    und je unterschiedlicher die datensätze werden, desto mehr if else braucht man bei cvs. :p



  • DerBaer schrieb:

    xml

    halte ich nicht für angebracht

    DerBaer schrieb:

    cvs

    csv



  • Hab nun in beiden Möglichkeiten reingeschaut, aber ich kann keine Code-Beispiele dazu finden.
    Ich habe mich nun dazu entschieden meine Level-daten in einer einfacheren Form zu speichern.
    Das sieht nun folgendermaßen aus :

    SizeX : 3
    SizeY : 2
    
    1 1 12, 1 0 14, 1 1 16
    1 2 12, 0 0 1, 0 0 1
    

    Die erste Zahl sagt aus, ob die Fläche begehbar ist.
    Die zweite Zahl sagt aus, welche collisionmethode für diese Fläche benötigt wird.
    Die dritte Zahl sagt aus, welches Bild in die Fläche gezeichnet werden soll.



  • Mach doch sowas binär?

    struct Surface
    {
      uint8_t isWalkable;
      uint8_t collisionType;
      uint16_t imageId;
    };
    
    struct MapHeader
    {
      uint16_t magic;
      uint16_t numSurfaces;
      uint16_t sizeX;
      uint16_t sizeY;
    };
    
    //C++, kb das in C zusammenzufutzeln^^
    
    using namespace std;
    
    template < typename data_t >
    data_t binaryRead(ifstream& fileHandle)
    {
    	data_t buffer;
    	fileHandle.read(static_cast<char*>(static_cast<void*>(&buffer)), sizeof(data_t));
    	return buffer;
    }
    
    MapHeader loadMap(ifstream& mapHandle, vector<Surface>& surfaces)
    {
      MapHeader header = binaryRead<MapHeader>(mapHandle);
      for(size_t i = 0; i < header.numSurfaces; ++i)
        surfaces.push_back(binaryRead<Surface>(mapHandle));
    
      return header;
    }
    

    Mal eben runtergetippt, sollte so gut funktionieren...


Anmelden zum Antworten