Variablen speichern



  • ich hab ein spiel geschrieben, das is aber noch nich fertig, weil man da noch net seinen Spielstand abspeichern kann... ich brauch jetzt jemanden der mir erklärt was ich machen muss und was ich dafür brauch, ich will nämlich die einzelnen variablen abspeichern undzwar an den pfad wo der user es haben will, wär nett wenn mir einer weiterhilft, aber bitte nich nur einen befehl posten!?

    mfg big juli



  • Als erstes legst du dir einen fstream an, der die gewünschte Savegame-Datei öffnet:

    string dateiname=...;//holen vom Nutzer
    ofstream fout(dateiname.c_str());
    

    Der nächste Schritt ist es, alle für dich benötigten Daten an diesen Stream weiterzuleiten. Dazu verwendest du entweder operator<< (Textformat, analog zur Konsolen-Ausgabe) oder write() (Binärformat):

    //a: op<<:
    //wichtig: achte auf Trennzeichen zwischen den einzelnen Werten
    fout<<pos.x<<' '<<pos.y<<endl;
    fout<<hitpoints<<endl;
    ...
    
    //b: write:
    fout.write(map,mapsize);
    ...
    

    -> fertig (alle deine Daten stehen jetzt im File)

    Zum Lesen gehst du analog vor, nur verwendest du op>> (Text) bzw. read() (Binär):

    string dateiname=...;
    ifstream fin(dateiname.c_str());
    
    //a: op>>:
    fin>>pos.x>>pos.y;
    fin>>hitpoints;
    
    //b: read:
    fin.read(map,mapsize);
    


  • oha, hätt nich erwartet das jemand sich solche mühe macht, danke danke!!! 😃
    das werde ich gleich mal so machen, wenn es probleme gibt melde ich mich aber steht ja eigentlich alles da...

    mfg big juli



  • fout<<pos.x<<' '<<pos.y<<endl;
    fout<<x<<endl;

    der zeigt mir dann etliche fehler: 'x' has not been declared...
    als was muss ich das denn declarieren, denn als ich das versucht hat kam: 'x' is not a type!? ausserdem steht da noch "request for member of non-aggregate type before '<<' token...

    mfg



  • Anstelle der dort genannten Variablen mußt du natürlich die Werte angeben, die für dein Spiel wichtig sind (da ich leider nicht hellsehen kann, habe ich dort willkürliche Namen verwendet).



  • äh verdammt.... ich kriegs net gebacken, also ich will die variable "mun" (int) speichern, ja halt da wo er sie haben will z.B. in ("C:\\Programme") als "Munzenspiel", das is der name den er noch eingibt unter der variable "name" (string), wär nett wenn du das noch mal machst mit dem declarieren und so weil ich da jetzt gar net mehr klar komm

    mfg



  • zum Speichern:

    ofstream file(dateiname.c_str());
    fout<<mun;
    

    zum Laden:

    ifstream file(dateiname.c_str());
    fin>>mun;
    

    (eventuell wäre nach dem Öffnen jeweils noch eine Überprüfung notwendig, ob alles geklappt hat:

    if(!file)
    {
      cout<<"Dateifehler"<<endl;
      return;//oder neuen Dateinamen eingeben lassen
    }
    

    PS: Das Spiel kannst du hoffentlich selber schreiben 😃



  • und was is fin? als was muss ich das declarieren?

    mfg



  • Ist jetzt nicht böse gemeint, aber irgendwie wundere ich mich immer wieder über Leute, die offenbar komplette Spiele schreiben können, aber nicht in der Lage sind einfachste Analogieübungen zu vollbringen...

    fin und fout sind die Namen aus dem ersten Beispiel, einfach mal über das nachdenken was man so empfohlen bekommt!



  • tja^^ das mit dem spieleschreiben, ich hab net aussem buch gemacht sondern so querbeet... das münzspiel is auch nur irgendeins was ich rausgesucht hab, das wirkliche spiel is ein statistik-basierendes mehr oder weniger kriegsspiel... aber das mit dem fout und fin 😡 is scheiße oO!!!

    mfg



  • Denn nenn' doch deine Variablen, wie du willst - das ist mir egal :p

    (und wenn du etwas an meinem Benennungsstil auszusetzen hast - schluck's runter)



  • ich hab doch gar nix gegen deinen stil, ich versteh nur nich wieso der compiler fin als falsch anzeigt, deswegen hab ich noch mal nachgefragt, ohne aber ne passende antwort zu bekommen --> bis jetzt...

    mfg



  • @CStoll das liegt ja auch an deinem geposteten Code 🙂
    Du hast

    ifstream file(dateiname.c_str());
    fin>>mun;
    

    Richtig wäre

    ifstream fin(dateiname.c_str());
    fin>>mun;
    


  • sag mal wenn ich alles richtig gemacht hab müsste der doch an der stelle wo ich

    ifstream file(dateiname.c_str());
    fin>>mun;

    gemacht habe sich ein neues fenster oder so öffnen, oder was passiert dann? weil bei mir passiert nämlich nix^^

    mfg



  • An der Stelle müsste sich überhaupt kein neues Fenster öffnen - das Programm legt lediglich eine Datei an und schreibt dort deine Daten rein.

    (geh mal mit dem Explorer in das genannte Verzeichnis und sieh dir die Datei an ;))



  • Also zum Basiswissen von C und C++ gehört dass man um eine Variable zu benutzen diese erstmal definieren muss.

    Wenn der Compiler sich über fin beschwert (mit einer konkreten Meldung dass er fin nicht kennt) wurde fin nicht als Variable definiert. Wenn man beginnt solche Fragen zu stellen sollte man das entsprechende Basiswissen haben.

    Bitte erst die Grundlagen, dann den Rest 😉


Anmelden zum Antworten