代码之家  ›  专栏  ›  技术社区  ›  Echo says Reinstate Monica

为一个非常大的游戏世界设计存储

  •  7
  • Echo says Reinstate Monica  · 技术社区  · 15 年前

    我正在重新启动游戏编程。10年前我在Qbasic制作游戏,从那以后我就没有做过任何游戏编程了,所以我很生疏。不过,我一直在编程,现在我是web开发人员/dba/admin。我有几个问题,但我会把每个帖子限制在一个范围内。

    我正在研究的游戏将是一个大的,非常大的世界。会有点像 URW 更大的世界,更像是一个“RPG”。

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

    有没有人对我该怎么做或其他存储方法有什么建议?

    以下是我的游戏要求:

    • 我需要完全随机访问游戏世界中的地点(NPC、怪物、动物都会一直活跃)。
    • 我使用的是无栈python 3.1,除非我做了很多工作,否则选项是非常有限的。
    • 需要能够处理一个非常大的世界。
    • 并发支持将是一个优势,但我认为我不需要它。
    3 回复  |  直到 13 年前
        1
  •  11
  •   S.Lott    15 年前

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

    看看巨蟒的 pickle , shelve .

    架子快,伸缩性好。它消除了Python和非Python表示之间的混乱转换。


    编辑。

    更重要的建议。不要陷入技术选择的泥潭。将位置、项目、字符、规则等获取到 工作 . 在蟒蛇中。尽可能简单和正确。

    除了核心模型、正确性和证明事物的基本特性外,不要在任何东西上燃烧一个大脑卡路里。 工作 .

    一旦你有了一个模型 作品 ,您可以通过一些复杂的单元测试进行练习,然后您可以做出技术选择。

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

        2
  •  3
  •   Kai    15 年前

    听起来你想要的是 spacial index . 对于非常大的二维游戏,我建议使用 quadtree . 当你有一个大的区域,并且活动往往发生在该区域的局部区域时,四叉树工作得很好,这是大多数RPG类型游戏的情况。它将使您的存储需求保持在较低的水平,并有望加速碰撞检测。

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

        3
  •  1
  •   edomaur    15 年前

    我使用非关系数据库来存储大量数据。如果您可以在64位硬件上工作, MongoDB 用它 Python driver 真的很好。我不知道Stackless是否可以这样做,但这是可能的。

    推荐文章