Konsolenspiel: Speichern mehrerer Variablen in einer Textdatei



  • Hallo,

    ich bin Anfänger und versuche mich gerade in einem einfachen Konsolenspiel. Dabei möchte ich einige Variablen für den Spieler speichern, um auch bei erneutem Aufruf darauf zugreifen zu können. Bisher habe ich diese Funktion verwendet:

    void levelabspeichern(){
    
    	ofstream schreiben_in_datei;
    
    	string dateiname;
    
    	dateiname="saves";
    	dateiname=dateiname+".txt";
    
    	schreiben_in_datei.open(dateiname.c_str(), ios_base::out);
    
    	if(!schreiben_in_datei){
    		cerr<<"Datei konnte nicht erstellt werden!";
    		getchar();
    
    	}
    
    	schreiben_in_datei<<level;
    
    	schreiben_in_datei.close();
    }
    bool levelladen(){
    
    	bool fehler=false;
    	ifstream lesen_aus_datei;
    	string dateiname_lesen="saves.txt";
    
    	lesen_aus_datei.open(dateiname_lesen.c_str(), ios::in);
    
    	if(!lesen_aus_datei){
    
    	fehler=true;
    
    	}
    
    	lesen_aus_datei>>level;
    
    	lesen_aus_datei.close();
    
    	return (fehler);
    }
    

    Damit ist es möglich die Variable "level" abzuspeichern. Allerdings hatte ich jetzt eine Blitzidee, für die ich gerne viele Werte auf einmal abspeichern möchte. Meine Frage ist:

    Ist das möglich? (ich benötige so ca. 40 gespeicherte Zahlen pro txt-Datei)
    Ich hatte schon die Idee, einfach viele Textdateien in einer Schleife zu generieren, wollte mich jedoch vorerst erkundigen, ob es auch eine einfachere Lösung gibt, etwa 40 variablen in einer txt abzuspeichern und später wieder richtig zugeordnet abzurufen.

    Vielen Dank schon mal im Voraus! 😃



  • Du kannst den Inhalt deiner Save datei vorher in einem bestimmten Format schreiben und dann beim laden entsprechend wieder einlesen und verwerten. (stichwort: 'parsen')

    Wenn du eine konstante Anzahl an Daten speicherst, benutze einfach ein trennungszeichen, welches du nach dem einlesen der Datei dazu benutzt, den String zu teilen. (bei 40 Werten hättest du dann 40 einzelne strings, die du dann auf deine Variablen verteilen musst)

    beispiel savedatei daten:
    1;Spieler1;1;0;1;0

    - einlesen der Datei
    - String teilen (bei jedem ; ) und auf die Variablen verteilen:
    level = parsedStr[0];
    playername = parsedStr[1];
    item1 = parsedStr[2];
    item2 = parsedStr[3];
    ...



  • Danke. Das werde ich mal ausprobieren. Muss ich zur Verwendung von parsen noch eine headerdatei includieren?
    Wenn ich dich richtig verstanden habe müsste ich mit

    schreiben_in_datei<<level<<";"<<Gegner[1]<<";"<<Gegne[2]<<Gegner[n];
    

    das ganze einlesen. Muss ich die Variablen parsenstr[n] einlesen oder die Variablen der Werte die ich speichern möchte?
    Kann ich mit diesem Prinzip sowohl string als auch int Variablen speichern?
    Und noch eine Frage:

    Wie kann ich die dann wider auslesen, sodass alle variablen den richtigen Wert bekommen. Es wäre toll, wenn mir da jemand ein einfaches Codebeispiel geben könnte.

    Danke 😃



  • Du kannst entweder eine Textdatei erzeugen so wie von Lupo beschrieben oder Weg 2:

    Binär-Datei:

    typedef struct level
    {
        int zahl1;
        int zahl2;
        ...
        int zahl40;
    }level_t;
    
    level_t master;
    
    master.zahl1 = ...;
    master.zahl2 = ...;
    
    //Level schreiben
    ofstream output_file("level.data", ios::binary);
    output_file.write((char*)&master, sizeof(master));
    output_file.close();
    
    //Level lesen
    ifstream input_file("level.data", ios::binary);
    input_file.read((char*)&master, sizeof(master));
    


  • Danke 😃


Log in to reply