我正在开发一个名为Bitiverse的微型持久化浏览器多人在线游戏(MMO),其中一个更为奇怪的架构决策是数据库中并没有存储其过世界(overworld)。假如世界种子相同,坐标相同,客户端和服务器都使用相同的确定性函数来计算基本地块。客户端使用它来渲染世界,而服务器使用它来验证移动和动作。数据库仅存储与生成世界不同的内容: 玩家角色和库存 建筑和占据的土地 打开或改变的方块 怪物和掉落的物品* 市场、公会、任务和其他持久化状态 这意味着我不需要一个巨大的表来包含每棵树、每块岩石、每堵墙和每块草地。空旷的荒野成本几乎为零,但玩家建造的房屋仍然是共享世界的一部分。它的工作得到了令人惊讶的好效果,但它也带来了某些严格的规则: 1. 世界生成必须完全确定性。 2. 无日期、未控制的随机性或环境依赖的行为可以进入共享生成代码。 3. 客户端和服务器世界生成版本必须同时发布。 4. 每个永久玩家变化都需要被表示为明确的覆盖而不是修改基本世界。有趣的后果是世界可以很大而不需要一个大的初始数据库,同时仍然允许玩家留下永久的证据。较不愉快的后果是改变世界生成后发布会变成软件的等同物,即在玩家睡觉时移动所有房屋。该项目已积累了制作、居住、上楼、公会、交易、市场、程序化地牢、任务、成就和因为范围是社会建构的检查子。它现在已经公开可玩,并且新玩家可以作为客人进入而不需要创建账户:https://fortisq.itch.io/bitiverse 我对使用类似的生成基本世界加持久差异模型的人感兴趣。世界发生变化时,玩家开始改变世界时,会遇到什么困难?