我正在尝试实现捕食者 - 猎物模拟,但我遇到了一个问题。
捕食者搜寻附近的猎物并吃掉它。如果附近没有猎物,它们会移动到一个随机空置的细胞中
基本上我遇到麻烦的部分是当我推进“一代”时
假设我有一个3x3的网格,每个单元格的编号从0到8
如果我在0和1中有2个捕食者,则检查第一个捕食者0,它移动到细胞3或4
例如,如果它进入单元格3,那么它继续检查捕食者1.这似乎是正确的
但它对指数值较低的生物有“优先考虑”。我尝试使用2个阵列,但这似乎不起作用,因为它会检查有机体但不是有生命的地方。 ._。
任何人都知道如何“公平地”和“正确地”做到这一点?
答案 0 :(得分:2)
如果你的猎物如此密集以至于这是一个常见的问题,我怀疑你没有一个可以长寿的“人口”。同时作为评论随机更新你的捕食者。也就是说,不是逐步遍历你的位置数组,而是将你的捕食者列表随机化,然后逐个更新它们。我认为是必要的,但我不知道它是否足够。
答案 1 :(得分:2)
我最近在Java中做了类似的任务。处理从顶行到底部的捕食者不仅给予较低指数“不公平的优势”,而且还在捕食者和捕食者的运动中创造了模式。
我通过以随机顺序方式选择行和列来克服这个问题。这样,每一只捕食者/猎物都有同样的机会在一代人的早期阶段被处理。
随机化的方法是创建(row,column)
对的链接列表。然后随机播放链表。在每一代中,选择一个随机索引来开始并继续处理。
答案 2 :(得分:1)
使用称为双缓冲的技术解决了这个问题,该技术也用于计算机图形学(为了防止当前正在绘制的图像干扰当前正在屏幕上显示的图像)。使用两个数组。第一个保存当前状态,并根据第一个数组做出关于移动的所有决定,但是在另一个数组中执行运动。然后,你交换他们的角色。
编辑:看起来我没有彻底阅读你的问题。可能需要双缓冲和随机化,这取决于您的规则有多复杂(但如果除了您描述的规则之外没有其他规则,则随机化就足够了)。但他们解决了两个截然不同的问题:
答案 3 :(得分:0)
某种循环方法怎么样?将捕食者放在循环链表中并保留指向当前“第一”的节点的指针。然后,将第一个指针推进到每一代列表中的下一个位置。您可以轻松地在循环列表的前面或后面插入新的捕食者。