我试图制作一个随机生成的二维游戏,我打算用一个生成点右边的地形列表和一个生成点左边的地形列表。但是,我需要这些列表没有长度限制,因为我希望世界是无限的。如果我找不到一种方法,我将会创造一个世界" round"但无限会更好。这可能吗?
答案 0 :(得分:2)
ArrayList是无限的...直到内存耗尽。但我猜这不是问题。
更新:对,这是有限的,即使我认为没有人会注意到20亿单位后世界重新开始。
再想一想。你需要的是一个随机函数,当你给它种子和当前位置时,它会一次又一次地创建相同的值。因此,您不存储世界,您可以在运行中重新计算它。
所以你只需要一个无限的计数器来代替你世界的位置。唯一的挑战是存储事件结果,例如我们吃蘑菇和毁坏桥梁。
答案 1 :(得分:1)
将所有数据存储在列表中会有很多限制。
如果您使用ArrayList
,则无法拥有无限元素。
如果您使用LinkedList
,则会失去随机访问权限,因此速度会慢很多。
对于任何列表,RAM都是一个问题。
通过将生成的区域分割成块,然后将它们存储到硬盘驱动器中,您会感觉更好。
现在,您仍然需要一个已加载区域的列表,但这将受到范围的限制。如果你在某个城镇的东边有2英里游戏,那么就没有必要保留城镇信息(我希望)。
一个非常受欢迎的游戏是Minecraft。试图将整个Minecraft世界加载到你的RAM中是不会发生的 - 但它仍然具有无限世界的潜力。
答案 2 :(得分:1)
如果世界变得庞大,我就不会将其存储在ArrayList
或LinkedList
中。相反,您可以让整个世界依赖于随机选择的long
值seed
。然后可以使用i
(或其他内容)找到位置new Random(seed ^ i).nextInt()
的地形。这样世界将(有效地)无限,你不必将地形保存在记忆中。每当你回到以前访问过的世界时,它就会像以前一样。不同世界的数量是2 ^ 64,因此在你再次看到同一个世界之前,你必须活很长时间。
答案 3 :(得分:0)
ArrayList最多可包含2 ^ 31个值(因为数组的长度是整数,这是无符号的4字节结构)。
然而LinkedList是无限的,唯一的限制是JVM的内存。