粉末游戏:它们如何运作?


13

我最近发现了这两个宝石:

http://powdertoy.co.uk/

http://dan-ball.jp/en/javagame/dust/

我的问题是:如何有效处理具有这么多元素的物理学?我只是严重低估了现代计算能力,还是可能“仅”拥有一个二维数组,该数组的每个单元格描述放置在相应位置的内容,并在每个步骤中模拟每个单元格。还是做一些更复杂的事情,例如将大面积的同类区域汇总到一个数据集中,并根据需要将所述数据集分开?

我可以看一下这样的开源游戏吗?


我曾问过有关在原始Stackowerflow上进行砂土模拟的类似问题。答案可能会对您有所帮助。
Evgeny Vinnik 2011年

Answers:


5

当然有很多;我曾经修改过它们。请注意,这些链接是针对论坛主题和源代码下载的。我最记忆深刻的两个是:

xavierenigma提供的EngimaSandC ++ | Java)Java较新。

sieben的BurningSandC ++)这是非常快的物理方法。

该网站是不幸的是接近死亡,但有几个线程这里对物理学。

编辑:对于任何感兴趣的人,我都在这里烧了EnigmaSand的Java源代码。


非常感激。不过,目前链接已断开。我会在几个小时后再试一次。
马克·穆勒

他们是?他们都对我很好。
共产党鸭子

1
Mediafire上传并编辑了答案。
共产党鸭子

5

这些游戏中的物理学是通过使用基于复杂细胞自动机的系统进行模拟的。它比“人生游戏”中使用的要复杂得多,并且包含的​​功能意味着它可能不是适当的CA,但计算起来仍然相对简单,而且已经使用了多年。不必赘述,但是算法的复杂度将很小,甚至O(area)。

看起来那里也有一些智能,对于产生的有趣效果也非常有效。


“并且包含的​​功能可能意味着它不是适当的CA”……这是什么意思?这些CA仅在拥有更多规则或更多内容上有所不同吗?
加斯顿

2
规范CA具有N + 1代中每个单元格的状态,该状态由函数定义,该函数取决于N代中单元格近邻的状态,并且每个单元格的功能通常相同。许多“粉”游戏都包含诸如物体或基于约束的物理对象之类的东西,这些东西并没有真正属于这一定义。我怀疑它们是否完全编码为CA。即使在某个时候它们的邻域变得足够大,过渡函数也变得足够复杂,以至于您实际上并没有在处理CA。
Gregory Avery-Weir

好的答案和评论Gregory,感谢您的见解。
工程师

1
尽管细胞自动机可能是其中的一部分,但这绝对不是全部答案。那里也有一个流体求解器,这就是它看起来如此“逼真的”的原因
bobobobo

@bobobobo:是的,它肯定超出了适当的细胞自动机的范围。
Gregory Avery-Weir

3

许多年前,Jos Stam开始发布他的流体求解器源代码。只有很少的代码可以建立网格并非常快速地解决Navier-Stokes方程。完整的资源也可以在他的页面上找到。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.