Level-Datei einlesen!



  • Hallo!

    Zuerst einmal, ich bin das erste mal hier und möchte mich bei allen Mitgliedern begrüßen! 🙂
    Also zu meinem Problem, ich programmiere gerade ein Spiel und möchte eine Level-Datei laden! Bis jetzt hatte ich nie Probleme, da ich es immer mit fscanf,.. programmiert habe, bis aufeinmal alle meinten, ich müsse das in C++ machen, da es viel schneller ist, usw..
    ok, also hab ich hier herumgesucht und frage mich, wie man das schön codet, zum Beispiel, habe ich Positionsangaben die in der txt-Datei so ausehen: 2,434,
    Also ich lese die Datei nun so:

    int a,b, c;
    	char h[1];
          ifstream file("test.txt");
          file>>b;
    	  file>>h;
    	  file>>c;
    

    Man muss doch hier nicht jedes mal extra den Beistrich auch einlesen, wie überspring ich den? Oder besser gesagt, wie codet man so etwas am schönsten? 🙂 thx

    cya,
    Stefan



  • das "," brauchst du nur einlesen, wenn du es auch reinschreibst,also wenn der "," keinen wirklich wichtigen sinn hat, dann schreib ihn nicht rein 😃

    wenn du angst hast, dass ifstream die zahlenreihe ohne "," nicht mehr aufdröseln kann, kann ich dich beruhigen, das klappt wunderbar 🙂



  • ok, danke, ich dachte eigentlich nur eher daran, dass es mit einem "," schöner wäre die LevelDatei zu lesen, aber dann mach ich jetzt doch einfach nur ein Leerzeichen 🙂

    Eine Frage hätte ich noch, wie kann ich den jetzt noch eine Veriable während der Laufzeit ändern? Weil da soll man ja auch nicht mehr den C-Stil verwenden! Glaube das gibts ja wieder ganz eigene Befehle? Falls Du ein Beispiel hättest, wäre ich dir sehr dankbar! 🙂



  • hmmm, was meinst du damit? Den Wert einer Variablen???

    int x=5;
    //Anweisungen
    x=7;  //hier wird der Wert der Variablen während der Laufzeit geändert
    

    oder vielleicht auch den Typ?

    char c='k';
    int x=static_cast<int>(c);
    

    oder die größe eines Arrays?

    char* c = new char[10];
    //...
    delete[] c;
    c=new char[20];
    //...
    delete[] c;
    

    Es gibt da viele Möglichkeiten, eine Variable während der Laufzeit zu ändern 😉



  • ethereal schrieb:

    oder vielleicht auch den Typ?

    char c='k';
    int x=static_cast<int>(c);
    

    Das verändert trotzdem nicht den Typ der Variablen.



  • Arggh, jepp, hast ja vollkommen recht! 🙄 Sry!



  • ohhh, sorry, ja ich meine die Größe eines Arrays während der Laufzeit zu verändern! Wenn ich jetzt int veriable[5]; habe, aber dann z.B plötzlich 10 Felder benötige von der veriable!



  • Sledgehammer schrieb:

    ohhh, sorry, ja ich meine die Größe eines Arrays während der Laufzeit zu verändern! Wenn ich jetzt int veriable[5]; habe, aber dann z.B plötzlich 10 Felder benötige von der veriable!

    Das geht nicht. Die Größe statischer Arrays auf dem Stack kann zur Laufzeit nicht mehr verändert werden. Wenn du den Speicher dynamisch allokierst, dann ist das allerdings kein Problem (siehe Beitrag von ethereal).



  • achja, man brauch für dateien keinerlei trennzeichen zwischen datensätzen, die verkomplizieren das alles wieder genauso wie ","zeichen(naja fast, der iterator überspringt zum glück " ").



  • ok, danke!
    Aber irgendwie hab ich mal gehöhrt man sollte das mit vector oder list oder irgendwie so machen! naja, so gehts ja auch!



  • hmm ja, das geht natürlich auch. Ich habe beim Begriff "Variable" jetzt nicht unbedingt an einen Vector gedacht, aber das ist in C++ sicherlich die schönste Lösung:

    #include <vector> 
    
    //...
    std::vector<int> v(10);
    v.resize(20);   //Größe ändern
    v.push_back(5);
    //usw...einfach mal die Members von vector anschauen...
    

    In der MSDN ist da auch noch guter Beispielcode, such mal nach "vector".



  • danke, funktioniert bestens!


Log in to reply