我听说过游戏《矮人要塞》,但只有现在我在YouTube上关注的一个人对此进行了评论……当我注意到矮人要塞实际上如何为世界创造历史时,我感到非常惊讶!
现在,这些算法如何工作?他们通常做什么除了模拟的时间长度,将作为输入?它们的具体程度如何?
更重要的是 可以用Java语言制作,还是Java语言太慢?(我猜这取决于模拟的深度,但以矮人要塞为例。)
Person
,该类负责琐事,参军等等。深深地要每个士兵为自己而战。
我听说过游戏《矮人要塞》,但只有现在我在YouTube上关注的一个人对此进行了评论……当我注意到矮人要塞实际上如何为世界创造历史时,我感到非常惊讶!
现在,这些算法如何工作?他们通常做什么除了模拟的时间长度,将作为输入?它们的具体程度如何?
更重要的是 可以用Java语言制作,还是Java语言太慢?(我猜这取决于模拟的深度,但以矮人要塞为例。)
Person
,该类负责琐事,参军等等。深深地要每个士兵为自己而战。
Answers:
首先,有一些关于矮人要塞的历史线索。不久前有人在Bay12论坛上提问,并分享了笔录,您可以通过搜索“今天的主题是世界的一代和历史的一代”来找到讨论的起点。
我不确切知道《矮人要塞》是如何做到的,但是我将解释我打算如何在游戏中实现一个非常基本的初稿。我将使用一个简单的元胞自动机。如果您浏览这些Spore原型,例如细胞培养和生物群落。
这些是蜂窝自动化及其产生的结果的示例。本质上,我将为不同种族创建规则。规则的一些示例包括:
因此,所有这些工作最关键的输入就是将这些种族纳入其中的世界。地形将决定他们的喜好和扩展。因此,一旦您创建了一个世界,请在世界上随机选择这些种族适合生活的地方并让他们放松。现在有趣的事情开始发生。既然您拥有拥有欲望和能力的土地和种族,就可以开始建立历史。这些种族收集资源,然后构建结构:
任何结构都可以被其他种族突袭/征服。历史上存在的建筑物(如城镇或堡垒)时间越长,防御性越强,越难接管。对于需要控制的种族来说,这是更理想的选择。在种族相遇的地方进行战斗(至少有一场是敌对的)。战斗以地标或附近的建筑物命名,或者如果战斗是重要的或未命名地标,则地标以战斗命名。
道路,桥梁和隧道通过商业和资源运输得到扩展。每个都有最大吞吐量,可以随着资源支出而增加。在草原中间建造石头堡垒?这些道路将大量用于运输所需的石材。它们会变大并获得名称。
发生自然灾害,影响人口和历史进程。地震可能会使城镇沦为废墟或使隧道倒塌。洪水可能会冲刷道路或桥梁。
它不像《矮人要塞》那样深入,但这是一个开始。现在,您可以想象,并且(正如Johnathan Hobbs提到的),这些种族越扩展,所模拟的细胞就越多。不仅要模拟更多的单元,而且模拟也更加复杂,因为现在有许多要构建/维护的结构,与工资的斗争,从商业到……的商业等等。这对于任何语言来说都是沉重的负担。Javascript可能会更快变慢。但是,您始终可以牺牲复杂性来提高速度。
这全都是模拟(尽管很复杂),您只是沿途记录了重要事件并称之为历史。
我还刚刚找到了一个Bay12论坛帖子,人们在集思广益,如何使矮人要塞世界更快。我没有读过它,但是如果您遇到实施速度太慢的问题,它可能会提供一些提示。
附带说明一下,JavaScript并没有您想象的那么慢。
浏览器开发人员已经花了 大量时间和精力来优化其JavaScript引擎。我链接到的基准测试表明,在基准测试任务中,JavaScript的中值仅比C慢5倍,而对于其他某些解释型语言则不能这么说。而且下界更加令人印象深刻:与C相当。
当然,语言基准测试并没有太大意义-您可能会使用其他基准测试找到反例。但是关键是JavaScript 相当快。不,它不是C或C ++,并且也没有尝试这样做。但是最好不要陷入“解释语言==慢”的思维定势中,因为对于非平凡复杂性的任何任务,性能对算法设计的影响更大,而对语言选择的影响则较小。
我本来打算在评论中写所有这些内容,但是我空间不足。