Effizientes Speichern von unbekannter Zahl an Flags

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut

Effizientes Speichern von unbekannter Zahl an Flags

Beitragvon Knittel » 12. Mär 2018, 14:35 Effizientes Speichern von unbekannter Zahl an Flags

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
Knittel
 
Beiträge: 12
Registriert: 26. Mär 2016, 14:43

Beitragvon Thandor » 12. Mär 2018, 15:09 Re: Effizientes Speichern von unbekannter Zahl an Flags

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.
Thandor
 
Beiträge: 118
Registriert: 30. Jan 2010, 18:17
Wohnort: Berlin
OS, Lazarus, FPC: Windows 10 64Bit/ lazarus 1.6 mit FPC 3.0.0 (32Bit) | 
CPU-Target: 64Bit
Nach oben

Beitragvon Niesi » 12. Mär 2018, 17:59 Re: Effizientes Speichern von unbekannter Zahl an Flags

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
Niesi
 
Beiträge: 64
Registriert: 26. Jun 2016, 18:44

Beitragvon Knittel » 14. Mär 2018, 15:43 Re: Effizientes Speichern von unbekannter Zahl an Flags

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
Knittel
 
Beiträge: 12
Registriert: 26. Mär 2016, 14:43

• Themenende •

Zurück zu Freepascal



Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast

cron
porpoises-institution
accuracy-worried