落砂模拟

我正在尝试重新创建一个“落砂”模拟,类似于那些在那里做同样事情的各种网络玩具 - 而且我很难失败。我不确定从哪里开始。我正在尝试使用细胞自动机来模拟沙粒的行为,但是我无法弄清楚如何使我更新“世界”的方向无关紧要...... 例如,我想要的一种粒子类型是Plant。当植物与水接触时,植物将水颗粒转变为另一种植物颗粒。这里的问题是,如果我从上到下,从左到右更新游戏世界,那么植物颗粒放置在海水中间的颗粒将立即导致所有水颗粒向右和向下新植物颗粒变成植物。这不是我期待的行为。 =(     
已邀请:
一个简单的解决方案是不要就地进行每次迭代。相反,每次更新世界时,都要创建它的副本......然后查看原始文件,但更新副本。这样,更新顺序不再重要,因为在查找粒子时,您完全无视更新。     
不要按顺序编程(循环遍历所有粒子),而是使用真实的模拟编程技术,其中每个粒子都被视为一个单独的对象/代理,它遵守物理定律并且可以异步地行动(运行)并响应“事件”(与其他粒子的相互作用)。 如果让每个沙粒都是一个单独的物体太细粒度,那么将世界划分为小块,比方说1000个粒子,然后简化这些块的行为。     

要回复问题请先登录注册