gpt4 book ai didi

java - 存储巨大瓦片 map 的选项

转载 作者:太空宇宙 更新时间:2023-11-04 11:39:35 24 4
gpt4 key购买 nike

我正在创建一个伪回合制在线策略浏览器游戏,很多人在同一个世界中玩很长一段时间(几个月)。为此,我想要一张 64000x64000 个图 block = 40 亿个图 block 的 map 。每个图 block 需要大约 6-10 字节的数据,总共约 30GB 的数据用于存储 map 。

每个图 block 应具有诸如类型(水、草、沙漠、山)、资源(木材、牛、金)和playerBuilt(道路、建筑物)等属性

客户端只需要同时访问大约 100x100 个图 block 。

我已经在客户端控制了 map 。我面临的问题是如何在服务器端存储、检索和修改此 map 中的信息。

所需功能:

  1. 创建、存储和修改 64000x64000 图 block map 。
  2. 向客户端显示 map 的 100x100 部分。
  3. 对 map 进行修改,例如道路、建筑物和枯竭的资源。

到目前为止我考虑过:

  1. 程序生成:按程序即时生成所需的 map 部分。确保给定相同的种子,它总是生成相同的 map 。我遇到的主要问题是游戏过程中会对 map 进行修改。注意:在游戏过程中,只有不到 1% 的图 block 会被修改,并且可以将修改与坐标存储在外部数组中。将它们加载到程序生成之上。
  2. 数据库:在游戏开始时生成 map 并将其存储在数据库中。对于如此巨大的图 block map ,一位 friend 建议我不要这样做,并告诉我我可能想将其存储在内存中。
  3. 将其全部保存在服务器端的内存中:以数据结构将其保存在内存中。如果 map 较小,这似乎是一个不错的方法,但对于 40 亿个图 block 来说,要保存在内存中的量就太大了。

我计划使用java+mysql作为这个项目的后端。我仍处于早期阶段,如果需要,我愿意改变技术。

我的问题是:上述三种方法中哪一种看起来可行和/或还有其他我没有考虑过的方法吗?

最佳答案

取决于:

  • 您有多少 RAM(或玩家/用户有多少 RAM)
  • 大部分图 block map 都是空的(稀疏)吗?对面是密集的。
  • 是否有默认地形(例如空地或水?)

如果稀疏,请使用 HashMap 而不是二维数组。

如果密集,则会更具挑战性,您可能需要使用数据库或一些特殊的数据结构+缓存。您可以检测热区并将其保留在内存中一段时间​​,死区(那里没有玩家,没有 Activity ......)可以存储在数据库中并按需读取。您还可以分几次加载数据:首先是地形,然后是其他对象......每个层都可以以不同的方式存储。例如,地形可以是柏林噪声生成+另一个可以修改的层。

关于java - 存储巨大瓦片 map 的选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42945963/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com