我正在尝试制作一个随机生成的2-d游戏,我计划在繁殖点右侧列出地形列表,在繁殖点左侧列出地形列表。然而,我需要这些列表没有长度限制,因为我希望世界是无限的。如果我找不到办法,我会让世界变得“圆”,但无穷大会更好。这个是可能的吗?
发布于 2015-03-07 08:07:09
ArrayList是无限的.直到内存耗尽。但我猜这不是问题所在。
更新:是的,这是有限的,尽管我认为没有人会注意到世界在20亿台之后重新启动。
我又想了一遍。你需要的是一个随机函数,当你给它种子和当前位置时,它会一次又一次地创建相同的值。所以你不是存储世界,而是在运行中重新计算它。
所以你只需要一个无限的计数器来表示你世界中的位置。唯一的挑战将是事件结果的存储,比如我们吃了蘑菇和被摧毁的桥梁。
发布于 2015-03-07 08:20:40
将所有数据存储在一个列表中会有很多限制。
如果你使用ArrayList,你不能有无限的元素。如果你使用LinkedList,你会失去随机访问,所以速度会慢很多。
对于任何列表,RAM都是一个问题。
将生成的区域拆分成块,然后将它们存储到硬盘驱动器中,这样会更好。
现在,您仍然需要一个已加载区域的列表,但这将受到作用域的限制。如果你在某个城镇以东2英里的地方,保留城镇信息是没有意义的(我希望如此)。
其中一个非常受欢迎的游戏是“我的世界”。试图将整个“我的世界”加载到你的RAM中是不可能的--但是它仍然有无限世界的潜力。
发布于 2015-03-07 08:23:56
如果世界变得很大,我不会把它存储在ArrayList或LinkedList中。相反,您可以让整个世界依赖于随机选择的long值seed。然后可以使用new Random(seed ^ i).nextInt() (或其他工具)找到位置i处的地形。这样,世界将是(有效的)无限的,你不必将地形保存在内存中。无论何时你回到以前去过的地方,它都会和以前一样。不同世界的数量是2^64,所以你必须活很长一段时间才能再次看到同一个世界。
https://stackoverflow.com/questions/28909714
复制相似问题