我试图制作一个简单的模型,让海龟在世界各地移动,它们只能重现一次。因此,如果模型以20只海龟开始,它必须在达到40时停止(在代码中没有告诉它)。孵化后,新龟将与母亲联系起来。这是代码。
breed [sons son]
sons-own [...]
to setup
ca
crt 20
[while [any? other turtles-here]
[setxy random-xcor random-ycor]]
reset-ticks
end
to go
move
reproduce
tick
end
to move
ask turtles [
lt random 45
rt random 45
fd 0.5
]
end
to reproduce
ask turtles [
if count my-links = 0 [
hatch-sons 1 [create-link-with myself]
]
]
end
这里的代码完美无缺,但是我想知道是否有一些像stop
这样的命令可以在1个儿子之后停止孵化。我试过stop
,但我尝试的方式似乎没有用。
答案 0 :(得分:2)
原始stop
是退出循环,但这似乎不必要地复杂,因为你想要做的就是在没有儿子的情况下拉出子集并让它们重现。您现有的代码可以通过一些修改来使它们成为定向链接(否则孩子们不会复制,因为他们有父母的链接),但这可能更清楚。
to reproduce
ask turtles with [ count my-out-links = 0 ] [
hatch-sons 1 [create-link-from myself]
]
end
请注意,我还更改了要定向的链接创建。
答案 1 :(得分:1)
让你的乌龟孵化一个后代的一种方法是简单地创建一个turtles-own
变量,你可以用它来跟踪乌龟是否已经复制。这是一个非常简单的例子:
turtles-own [ have-reproduced? ]
to setup
ca
reset-ticks
crt 20 [
set have-reproduced? false
setxy random 30 - 15 random 30 - 15
]
end
to go
ask turtles [
if have-reproduced? = false [
hatch 1
set have-reproduced? true
]
fd 1
]
end
在上面的代码中,所有海龟的have-reproduced?
变量最初都是false
。然而,一旦龟孵化了后代,它们的have-reproduced?
将设置为true
,因此下次调用该程序时它们不会孵化任何后代(尽管它们的后代将会出现)。尝试在您的界面上运行该代码并包含count turtles
的监视器,每次调用go
时,您将看到海龟数量增加20。