Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 为大型游戏世界设计存储空间_Python_Sqlite_Python 3.x_Python Stackless - Fatal编程技术网

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

Python 为大型游戏世界设计存储空间,python,sqlite,python-3.x,python-stackless,Python,Sqlite,Python 3.x,Python Stackless,我又开始游戏编程了。10年前我用qbasic做游戏,从那以后我再也没有做过任何游戏编程,所以我很生疏。虽然我一直在编程,但我现在是web开发人员/DBA/管理员。我有几个问题,但我会限制在每个帖子一个 我正在做的游戏将是一个非常大的世界。这将是一个更大的世界,更像一个“RPG” 我一直在努力决定,什么是布局地图、保存地图和访问地图的最佳方式。我想到了使用sqlite存储数据的想法。然后我甚至可以使用sqlite db作为游戏的保存文件,非常简单 有人对我应该如何进行这项工作有什么建议,或者对其他

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

我正在做的游戏将是一个非常大的世界。这将是一个更大的世界,更像一个“RPG”

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

有人对我应该如何进行这项工作有什么建议,或者对其他存储方法有什么想法吗

以下是我的游戏的要求:

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

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

看看Python的
pickle

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


编辑

更重要的建议。不要陷入技术选择的泥潭。让位置、项目、字符、规则等发挥作用。在Python中。尽可能简单和正确

除了核心模型、正确性和基本功能集来证明事情的有效性外,不要在任何事情上消耗任何大脑热量

一旦你有了一个实际工作的模型,你可以通过一些复杂的单元测试来练习,然后你就可以做出技术选择


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

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


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

我使用非关系数据库来存储大量数据。如果你能在64位硬件上工作,用它真的很好。我不知道这对Stackless是否合适,但这是可能的。

很有趣,所以我跟随了链接。如果您看一下这里指出的限制(简而言之:小对象和无并发性),这似乎是一个错误的选择Echo的问题。SQLite对并发性的支持也很有限。从这个问题上看,这甚至都不清楚。我不太确定这是否对我有效。但我会调查的,谢谢。书架是否将整个“书架”保存在内存中?我从医生那里看不出来。还有,你知道它能处理数百万件事情吗?@Echo:搁置的目的是要有一个包含实际数据的文件。你也可以看看。这很相似。@s.Lott:好主意。我想现在我将开始使用一个常规的python dict,并在以后根据需要进行更改。