我正在创建一个基于文本的游戏,并尝试实现程序世界生成。
我最初的计划有点杂乱无章:每个宇宙都有一个星系的三维星系,太阳系,然后又随机天体传播。我打算单独生成实际的本地区域,但我不确定它是否可以像我一样完成任务。
Each universe is a Galaxy[10][10][10] (arbitrary number at the moment),
each galaxy is a randomly sized SolarSystem[50-150][50-150][50-150],
each SolarSystem is a randomly sized CelestialBody[5-20][5-20][5-20].
然后将所有这些内容写入数据文件以便稍后阅读。
现在看一下,如果我没有弄错的话,这将需要(((ClassSize ^ 3)^ 3)^ 3)字节,即使ClassSize只有4个字节也无法存储。
我最初对阵列数组的意图是能够有效地将群集组合在一起,更好地帮助识别玩家在宇宙中的位置。
我的问题是:如何更有效地创造这样规模的世界?
答案 0 :(得分:9)
不是试图存储生成的宇宙,只需为每个玩家创建一个独特的随机种子值,并在玩家玩游戏时使用它来在程序上生成动态世界。
每次使用相同的值为您的生成器播种时,随机数每次都相同。因此,如果我的唯一随机玩家ID为654156475
,则在我加载游戏时将该ID放入Universe生成器,并且生成器每次都会生成相同的Universe。不同的玩家会获得不同的宇宙,因为他们的种子与我的不同。
请参阅this article的“视频游戏”部分,详细了解如何在游戏中使用此技术。
或者,不是将其写为宇宙生成器,而是将其写为太阳系发生器(或者是玩家将占用的最小空间单位)。然后,为每个太阳系存储随机种子,并使用这些种子(这将是相对少量的数据)来生成(并在以后重新生成相同的内容)随着玩家的游戏而飞。
这种方法的主要优点是您只需将种子值存储在磁盘上,这是一个非常少量的数据,您根本不必存储Universe数据。不仅如此,在飞行中只重新生成宇宙的一小部分通常比从磁盘加载它快得多。
答案 1 :(得分:5)