Syc*_*ren -1 algorithm simulation logic
我正在写一个捕食者/猎物模拟,其中物体可以出生或被杀死.当被杀死时,它们会从arraylist中删除,当它们出生时会被添加.列表中的每个对象都可以杀死另一个对象或复制.我浏览列表模拟每个对象的移动和与周围环境的交互,包括决定复制或杀死另一个对象(如果它关闭).
正常的循环中断就好像删除或出生时,它当前所在的索引是倾斜的.什么是更好的解决方案?虽然有一个计数器和条件,大小> 0或其他一些方式?
您可以等到迭代完成后添加/删除项目:
entities_to_add = new Array;
entities_to_remove = new Array;
function tick():
for each entity in world:
//general entity behavior goes here
if entity.wants_to_reproduce:
entities_to_add.append(entity.make_baby())
if entity.wants_to_die:
entities_to_remove.append(entity)
function cleanup():
for each entity in entities_to_remove:
world.remove(entity)
for each entity in entities_to_add:
world.add(entity)
entities_to_remove.clear()
entities_to_add.clear()
function main():
while(True):
tick()
cleanup()
Run Code Online (Sandbox Code Playgroud)
这样做的缺点是,一个死亡的实体看起来会一直存在,直到滴答结束.这可能是坏的,例如,如果捕食者杀死猎物,并且第二捕食者也在相同的滴答声中杀死该猎物.如果这不合适,你可以让掠夺者在攻击之前检查entities_to_remove数组,以确保它们的猎物仍然存活.