我正在尝试实施捕食者 - 猎物的模型。 它是基于代理的模型。每隔几毫秒就是一个新举措。在场上有两种类型的生物:捕食者和猎物。每个人的行为由以下规则给出:
食饵:
捕食者:
我有选择猎物移动的问题。
例如,我在单元格5和9中有猎物。 它们中的每一个都可以移动到单元格6。 我该如何解决这个冲突? 感谢
答案 0 :(得分:4)
使用异步更新。以随机顺序迭代猎物,让他们轮流决定他们应该移动哪个细胞。
这是模拟中的常用方法。它具有额外的好处,因为它消除了动态中的极限循环。
答案 1 :(得分:0)
'移动'需要多长时间?如果你移动一个,那么在猎物移动后,你移动下一个,没有冲突。猎物只会看到空间已被占用并移动到其他地方。
如果移动需要时间你可能会说猎物会密切注视彼此,看看是否有其他猎物试图移动到某个地方(就像人们在交通中看车)。然后,当5的猎物试图移动到那里时,您将目标字段的状态更改为“保留为5”。然后从9的猎物可以看到这个,并决定他们是否想要与5碰撞(可能是有趣的:P)或避免5。
答案 2 :(得分:0)
取决于游戏逻辑。如果猎物可以在同一个细胞上,那么只需使用显示猎物计数的指示器。如果您使用2D数组表示当前字段状态,则可以使用以下代码:
-1 - predator
n - preys
n> = 0,(n = 0 - 单元格为空,n = 1单元格包含1个猎物,依此类推。)
否则(如果猎物不能出现在同一个细胞上)使用回合制策略。将所有猎物保存在阵列中或给每个猎物分配编号。在那种情况下,猎物的移动代表简单的循环(伪代码):
for each prey in preys
move(prey)
end
其中移动逻辑描述了猎物如何移动的算法。
答案 3 :(得分:0)
有很多方法,取决于你是否决定&两步或一步等等:
实际上没有'正确'的方法。
答案 4 :(得分:0)
请参阅此相关问题和我的回答。 它描述了一种良好的碰撞检测机制。