我正在尝试以函数式编程风格编写游戏,这意味着使用纯函数、不可变的数据结构来表示游戏状态。
其中最重要的数据结构之一将是代表世界的3D网格,其中对象可以存储在任何[x,y,z]网格位置。我想要这个数据结构具备以下属性:
- 不可变
- 快速持久更新 - 即创建整个网格的新版本并进行少量更改应该是廉价的,并通过结构共享实现。网格可能很大,因此复制-写入不是可行的选项。
- 高效处理稀疏区域/相同值 - 空/未填充区域不应消耗任何资源(以允许大型开放空间)。如果它同时能够高效存储大块相同的值,那就更好了。
- 无限制 - 可以根据需要向任何方向增长
- 快速读取/查找 - 即可以快速检索[x,y,z]处的对象
- 快速体积查询,即通过区域[x1,y1,z1]->[x2,y2,z2]进行快速搜索,最好利用稀疏性,以便快速跳过空白空间
您有关于使用哪种最佳数据结构的建议吗?
P.S. 我知道这可能不是编写游戏最实用的方法,我只是把它作为学习经验和扩展函数式编程技能的一种方式......