为大型游戏世界设计存储空间

时间:2009-10-30 15:49:23

标签: python sqlite python-3.x python-stackless

我再次启动游戏编程。 10年前我在qbasic制作游戏,自那以后我就没有做任何游戏编程,所以我很生疏。我一直在编程,我现在是web开发人员/ DBA / admin。我有几个问题,但我会将它限制为每个帖子一个。

我正在进行的游戏将是一个庞大的,非常大的世界。它有点像URW,但是更大的世界,更像是'RPG'。

我一直在努力决定,布局地图,保存和访问地图的最佳方式是什么。我想到了使用sqlite来存储数据的想法。我甚至可以使用sqlite db作为游戏的保存文件,既简单又好用。

任何人都有关于我应该如何解决此问题或其他存储方法的想法的任何提示?

以下是我游戏的要求:

  • 我需要完全随机访问游戏世界(NPC,怪物,动物都会一直活跃)。
  • 我正在使用Stackless Python 3.1,除非我做了很多工作,否则选项非常有限。
  • 需要能够处理一个非常大的世界。
  • 并发支持将是一个加分,但我认为我不会需要它。

3 个答案:

答案 0 :(得分:11)

除非您被外部因素强迫使用它们,否则不要乱用关系数据库。

查看Python的pickleshelve

搁架快速且伸缩良好。它消除了Python和非Python表示之间的混乱转换。


编辑。

更重要的建议。不要陷入技术选择的困境。获取工作的位置,项目,字符,规则等。在Python中。尽可能简单准确。

除了核心模型,正确性和基本功能集以证明事情工作之外,不要烧掉单个大脑卡路里。

一旦你拥有一个实际工作的模型,并且你可以使用一些复杂的单元测试,那么你可以做出技术选择。

拥有模型后,您可以有意义地将其扩展到数百万个位置,并查看所需的存储类型。模型无法改变 - 这是应用程序的本质。只有访问层和持久层可以更改以调整性能。

答案 1 :(得分:3)

听起来你要求的是一种spacial index。对于一个非常大的2D游戏,我建议使用quadtree。当你有大面积时,四叉树运作良好,并且活动往往发生在该地区的局部区域,这是大多数RPG类型游戏的情况。它可以保持较低的存储要求,并有望加快碰撞检测速度。

至于保存游戏,玩家和怪物统计等内容可以进入数据库,如果你担心经常变化的话。对于实际的级别布局,我建议使用特定于游戏的二进制文件格式。通常需要在级别布局上执行的数据库类型查询不多,您可以使用自己的格式进行大量优化。我不知道如何开始在数据库中存储类似四叉树的格式(虽然我确信它可能)。

答案 2 :(得分:1)

我使用非关系型数据库来存储大量数据。如果您可以使用64位硬件,MongoDB及其Python driver非常好。我不知道Stackless是否可以,但这是可能的。