Ich experimentiere damit, ein Spiel in einem funktionalen Programmierstil zu schreiben, was bedeutet, dass der Spielzustand mit rein funktionalen, unveränderlichen Datenstrukturen dargestellt wird.
Eine der wichtigsten Datenstrukturen wäre ein 3D-Gitter, das die Welt darstellt und in dem Objekte an jeder beliebigen [x,y,z]-Gitterposition gespeichert werden können. Die Eigenschaften, die ich mir für diese Datenstruktur wünsche, sind:
- Unveränderlich
- Schnelle dauerhafte Aktualisierungen - d.h. die Erstellung einer neuen Version des gesamten Gitters mit kleinen Änderungen ist billig und wird durch die gemeinsame Nutzung von Strukturen erreicht. Das Netz kann groß sein, so dass das Kopieren beim Schreiben keine praktikable Option ist.
- Effizienter Umgang mit spärlichen Bereichen / identischen Werten - leere/unbesiedelte Gebiete sollten keine Ressourcen verbrauchen (um große Freiflächen zu ermöglichen). Bonuspunkte, wenn es auch effizient ist, große "Blöcke" identischer Werte zu speichern
- Unbegrenzt - kann je nach Bedarf in jede Richtung wachsen
- Schnelles Lesen / Nachschlagen - d. h. das Objekt bzw. die Objekte an der Position [x,y,z] schnell auffinden kann
- Schnelle Volumenabfragen d.h. schnelles Durchsuchen einer Region [x1,y1,z1] -> [x2,y2,z2], wobei idealerweise die Sparsamkeit ausgenutzt wird, damit leere Räume schnell übersprungen werden
Gibt es Vorschläge für die beste Datenstruktur, die dafür verwendet werden kann?
P.S. Ich weiß, das ist vielleicht nicht die beste praktisch Weg, ein Spiel zu schreiben, ich mache es nur als Lernerfahrung und um meine Fähigkeiten mit FP...... zu erweitern.