ds_grid mit dem Spiel speichern

  • GM 8

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • ds_grid mit dem Spiel speichern

    Guten Morgen,

    ich habe ein Spiel, bei dem eine Statitik in Form eines ds_grid mitläuft. Diese Statistik würde ich jetzt gerne, wenn der Spieler ein Spiel speichert, um später weiterzuspielen, mit speichern lassen. Mein Problem ist folgendes:

    Da bei jedem Spielbeginn eine neue Statistik angelegt wird, habe ich vor dem Speichern des Spieles das grid in eine andere grid kopiert und diese mit abgespeichert. Wird jetzt das Spiel erneut geladen, kopiere ich einfach das 2. Grid auf das Erste (neue) zurück. Das scheint auch zu funktionieren - solange das Spiel im Speicher ist.

    Aber wenn das Spiel beendet und aus dem Speicher genommen wurde - dann funktioniert das nicht mehr! Dann sind nach dem Laden sämtliche Zellen leer! Nun dachte (hoffte) ich, dass dieser grid_disk-Befehl irgendwas mit dem Speichern eines grid zu tun hat, aber die meinen wohl etwas anderes damit.

    Meine Frage ist nun: muss ich wirklich das Grid jedesmal, wenn ich ein Spiel speichere, separat dazu abspeichern und falls ja: wie geht das?? Ich habe bislang noch nichts gefunden, mit dem man ein Grid speichern könnte, in der Hilfe steht gar nichts dazu.

    Bin für jeden Hinweis dankbar, denn ich schwebe jetzt ziemlich in der Luft damit.
    Gruß Archie
    Signatur? Ich überlege mir noch eine. Die besten sind ja schon alle vergeben... :para:
  • Die Funktionen deiner Wahl heißen ds_grid_write(id) und ds_grid_read(id,string) - erstere macht aus einem bestehenden Grid einen String, den du dann z.B. in einer Textdatei abspeichern kannst und letztere modifiziert ein bestehendes Grid, so dass am Ende genau das vom eingegebenen String beschriebene Grid entsteht. Soll heißen, zum Lesen erstellst du erst ein leeres 1x1-Grid und führst dann ds_grid_read(id dieses grids,aus der savefile gelesener string) aus - dann kriegst du zurück, was du gespeichert hast. Praktische Sache, das. ^^
  • Irrenhaus3 schrieb:

    Soll heißen, zum Lesen erstellst du erst ein leeres 1x1-Grid und führst dann ds_grid_read(id dieses grids,aus der savefile gelesener string) aus - dann kriegst du zurück, was du gespeichert hast. Praktische Sache, das.

    Irrenhaus3 schrieb:

    Soll heißen, zum Lesen erstellst du erst ein leeres 1x1-Grid und führst dann ds_grid_read(id dieses grids,aus der savefile gelesener string) aus - dann kriegst du zurück, was du gespeichert hast. Praktische Sache, das.



    Whow, das hört sich alles klasse an! Ich bekomme auch tatsächlich eine Datei namens statistik.dat, die offenbar das Grid enthält. Jedoch mit dem zurückschreiben in das Grid gibt es ein Problem: ich bekomme nur einen leeren String...
    Kannst Du mir vielleicht an dieser Stelle noch mal unter die Arme greifen?

    Also zum Verständnis: ich habe eine "normale" Statistik namens "stat" und deinem Vorschlag zufolge jetzt ein zweites, leeres grid von 1x1 Felder erstellt namens "stat_copy".

    zum Speichern:

    Quellcode

    1. mygrid=ds_grid_write(stat);
    2. datei=file_text_open_write('statistik.dat');
    3. file_text_write_string(global.datei,mygrid);
    4. file_text_close(datei);
    5. [i]und jetzt wieder einlesen:[/i]
    6. datei=file_text_open_read('statistik.dat');
    7. stat_copy=ds_grid_read(stat,mygrid);
    8. file_text_close(datei);


    und in der mittleren Zeile vom Einlesen da stümmt was net! Eigentlich sollte jetzt - wenn ich Dich richtig verstanden habe - dort in stat_copy das zurückgeschriebene grid stehen, steht es aber leider nicht... *seufz*

    Kannst Du mir bitte sagen, wo mein Fehler diesmal liegt?
    Danke für Deine Mühe schon mal im voraus,
    Gruß Archie
    Signatur? Ich überlege mir noch eine. Die besten sind ja schon alle vergeben... :para:
  • 1.: Ich geh mal stark davon aus, dass global.datei und datei zwei verschiedene Variablen sind. Vorsicht, nicht durcheinanderwürfeln. ;)
    2.: Du musst den String natürlich auch aus der Datei lesen. Beispielsweise so:

    GML-Quellcode

    1. var str;
    2. MYGRID=ds_grid_create(1,1);
    3. file=file_text_open_read('statistik.dat');
    4. str=file_text_read_string(file);
    5. file_text_close(file);
    6. ds_grid_read(MYGRID,str);

    Das Zwischenspeichern in der temporären Variable str kannst du zwar im Prinzip auch weglassen, kriegst damit aber nen unschöneren Klammersalat (und wenn beim Lesen ein Fehler auftritt und dir das Spiel crasht, ist das Rückverfolgen schwieriger als nötig).

    Zusammenfassend ist die Vorgehensweise also etwa so:
    Zum Speichern erst das Grid encodieren, dann die Datei öffnen, dann dort den Code reinschreiben, dann die Datei wieder schließen.
    Zum Laden erst die Datei öffnen, dort den Code rauspicken, die Datei wieder schließen und dann den Code wieder in ein Grid rückübersetzen, mit dem man ein extra dafür vorgefertigtes Platzhaltergrid überschreibt.

    Alles klar soweit? :D
  • Irrenhaus3 schrieb:

    Alles klar soweit?

    Irrenhaus3 schrieb:

    Alles klar soweit?

    Irrenhaus3 schrieb:

    Alles klar soweit?


    Whow, jajaja - es klappt! :thumbsup: 1000 Dank an Dich!
    Mein Fehler war einfach, dass ich dachte, dieses grid_write ersetzt das Lesen aus der Datei - auf die Idee, dass ich es erst mal "normal" auslesen muss, bin ich ehrlich gesagt nicht gekommen. Mea culpa, sorry.

    Wie auch immer, jetzt klappt es endlich, dank Deiner Hilfe. Und nein, "datei" und "global.datei" sind natürlich identisch, müssen sie ja auch. Ich habe nur "datei" vorübergehend in "global.datei" umbenannt, damit ich im Debugger sehen konnte, was sich da tut. Und dann natürlich hier vergessen, wieder umzubenennen.

    Also, allen Dank der Welt noch mal von mir und noch einen erfolgreichen Tag,
    Archie

    Edit:
    PS: Dass hier jedes Zitat mehrmals zitiert wird, liegt nicht an mir, sondern an der Tatsache, wie oft man auf "Absenden" klicken muss, bevor es angenommen wird.... ;)
    Signatur? Ich überlege mir noch eine. Die besten sind ja schon alle vergeben... :para: