Effizientes Speichern von unbekannter Zahl an Flags

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
Antworten
Knittel
Beiträge: 12
Registriert: Sa 26. Mär 2016, 14:43

Effizientes Speichern von unbekannter Zahl an Flags

Beitrag von Knittel »

Hallo liebe Community,

ich stehe gerade scheinbar etwas auf dem Schlauch dabei eine sinnvolle Lösung für mein Problem zu finden, ich hoffe ihr könnt mir einen kleinen Anreiz / Idee geben.

Kontext:
ich programmiere an einem Spiel und möchte im Moment den Fortschritt des Spielers speichern. Es gibt verschiedene Story Events, die alle maximal 1x vom Spieler ausgelöst werden können und tendentiell fast in komplett
beliebiger Reihenfolge vom Spieler angegangen werden können. Diese StoryEvents werden dynamisch aus Dateien geladen, weil ich so das Spiel einfacher erweitern kann.
Die StoryEvents haben jeweils eine ID z.B. "stadt/eingang" oder "wald/spinnen", die dadurch bedingt wird, wie die Ordner / Dateien heissen aus denen das StoryEvent geladen wird.
Sprich wenn ich die Flags (ob das StoryEvent bereits durchgespielt wurde) als BitArray speichern würde, also z.B. für
stadt/eingang
wald/spinnen

würde ich 1,1 abspeichern, weil der Spieler beide Events gemacht hat. Sollte ich dann aber ein neues Event hinzufügen "turm/aussicht", dann würde das Programm auf Grund der alphabetischen Reihenfolge erst "turm/aussicht" vor "wald/spinnen" laden und denken "wald/spinnen" wäre noch nicht abgearbeitet aber "turm/aussicht" schon.

Bisher habe ich eine Idee um dieses Problem zu umgehen:
[*] Ich speichere alle IDs von Events die schon abgearbeitet wurden (Einfach eine Liste an Strings), aber damit ist das Savegame natürlich ne ganze Größenordnung schwerer.

Seht ihr eine schönere Lösung oder denkt ihr es führt keine Weg daran vorbei alle IDs abzuspeichern zu müssen?

Vielen Dank schonmal!

Gruß Knittel

Thandor
Beiträge: 153
Registriert: Sa 30. Jan 2010, 18:17
OS, Lazarus, FPC: Windows 10 64Bit/ lazarus 3.0 mit FPC 3.2.2 (32Bit + 64bit)
CPU-Target: 64Bit
Wohnort: Berlin

Re: Effizientes Speichern von unbekannter Zahl an Flags

Beitrag von Thandor »

Bei einem Spieleprojekt, an dem du wahrscheinlich sogar noch alleine Entwikelst solltest du Optimirungen nur dann machen, wenn es notwendig wird. Sonst verrenst du dich nur.
Wichtiger ist, dass du sauberen und lesbasren Code schreibst (Wartbarkeit).

Wie Größ wird den das Savegame für beide Varianten? Solange sich das im MB-Bereich bewegt brauchst du dir keine Sorgen zu machen. Werden es mehrere GB dann sollte mann noch mal nachdenken.

Benutzeravatar
Niesi
Lazarusforum e. V.
Beiträge: 331
Registriert: So 26. Jun 2016, 19:44
OS, Lazarus, FPC: Linux Mint Cinnamon (Windows wenn notwendig), Lazarus 3.0 FPC 3.3.1

Re: Effizientes Speichern von unbekannter Zahl an Flags

Beitrag von Niesi »

Knittel hat geschrieben:Hallo liebe Community,

ich stehe gerade scheinbar etwas auf dem Schlauch dabei eine sinnvolle Lösung für mein Problem zu finden, ich hoffe ihr könnt mir einen kleinen Anreiz / Idee geben.

Kontext:
ich programmiere an einem Spiel und möchte im Moment den Fortschritt des Spielers speichern. Es gibt verschiedene Story Events, die alle maximal 1x vom Spieler ausgelöst werden können und tendentiell fast in komplett
beliebiger Reihenfolge vom Spieler angegangen werden können. Diese StoryEvents werden dynamisch aus Dateien geladen, weil ich so das Spiel einfacher erweitern kann.
Die StoryEvents haben jeweils eine ID z.B. "stadt/eingang" oder "wald/spinnen", die dadurch bedingt wird, wie die Ordner / Dateien heissen aus denen das StoryEvent geladen wird.
Sprich wenn ich die Flags (ob das StoryEvent bereits durchgespielt wurde) als BitArray speichern würde, also z.B. für
stadt/eingang
wald/spinnen

würde ich 1,1 abspeichern, weil der Spieler beide Events gemacht hat. Sollte ich dann aber ein neues Event hinzufügen "turm/aussicht", dann würde das Programm auf Grund der alphabetischen Reihenfolge erst "turm/aussicht" vor "wald/spinnen" laden und denken "wald/spinnen" wäre noch nicht abgearbeitet aber "turm/aussicht" schon.

Bisher habe ich eine Idee um dieses Problem zu umgehen:
[*] Ich speichere alle IDs von Events die schon abgearbeitet wurden (Einfach eine Liste an Strings), aber damit ist das Savegame natürlich ne ganze Größenordnung schwerer.

Seht ihr eine schönere Lösung oder denkt ihr es führt keine Weg daran vorbei alle IDs abzuspeichern zu müssen?

Vielen Dank schonmal!

Gruß Knittel


Hallo Knittel,

Hast Du schon mal mit dem Gedanken gespielt, den Dateinamen Nummern vorweg zu stellen?

Z. B.:
001_wald_spinnen.xxx
002_stadt_eingang.xxx
003_turm_aussicht.xxx

Damit kannst Du die Reihenfolge der Dateien eindeutig festlegen ...

Beste Grüße
Wissen ist das einzige Gut, das sich vermehrt, wenn es geteilt wird ...

Knittel
Beiträge: 12
Registriert: Sa 26. Mär 2016, 14:43

Re: Effizientes Speichern von unbekannter Zahl an Flags

Beitrag von Knittel »

Vielen Dank ihr beiden!

Ich glaube ich werde erstmal bei der String Variante bleiben, das Savegame kommt momentan noch nichtmal ganz auf 1 MB. Wenn es doch mehr werden sollte später, dann klingt diese Zahlen Idee nicht schlecht.

Gruß Knittel

Antworten