7

我又开始了游戏编程。10年前我在qbasic做游戏,从那以后我就没有做过任何游戏编程,所以我很生疏。不过,我一直在编程,现在我是 Web 开发人员/DBA/管理员。我有几个问题,但我将限制为每个帖子一个。

我正在开发的游戏将是一个非常大的世界。它将有点像URW,但更大的世界,更像是一个“RPG”。

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

有人对我应该如何处理这个问题或其他存储方法有任何建议吗?

以下是我的游戏的要求:

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

3 回答 3

11

不要乱用关系数据库,除非你因为外部因素而被迫使用它们。

看看 Python 的pickle搁置

Shelf 速度很快,并且可以很好地扩展。它消除了 Python 和非 Python 表示之间的混乱转换。


编辑。

更重要的建议。不要陷入技术选择的困境。让地点、物品、角色、规则等发挥作用。在 Python 中。尽可能简单和正确。

除了核心模型、正确性和证明事情有效的基本特征集之外,不要在任何东西上消耗一丁点大脑卡路里。

一旦你有了一个真正有效的模型,并且你可以通过一些复杂的单元测试来练习,那么你就可以做出技术选择。

一旦你有了一个模型,你就可以有意义地将它扩展到数百万个位置,并查看需要什么样的存储。模型不能改变——它是应用程序的本质。只有接入层和持久层可以改变来调整性能。

于 2009-10-30T15:53:29.560 回答
3

听起来您要的是一种空间索引。对于非常大的 2d 游戏,我建议使用quadtree。当您拥有较大的区域并且活动往往发生在该区域的局部区域时,四叉树效果很好,这是大多数 RPG 类型游戏的情况。它将使您的存储需求保持在较低水平,并有望加快碰撞检测速度。

至于保存游戏,如果你担心那些经常变化的东西,比如玩家和怪物统计数据可以进入数据库。对于实际的关卡布局,我建议使用特定于游戏的二进制文件格式。您通常需要在关卡布局上执行的数据库类型查询并不多,您可以使用自己的格式进行出色的优化。我不知道如何开始在数据库中存储类似四叉树的格式(尽管我确信它是可能的)。

于 2009-10-30T16:22:35.337 回答
1

我正在使用非关系数据库来存储大量数据。如果您可以在 64 位硬件上工作,那么带有Python 驱动程序的MongoDB确实非常好。我不知道 Stackless 是否可以,但这是可能的。

于 2009-11-02T12:02:29.857 回答