设定海龟的年龄
Setting Age on Turtles
我让我的海龟拥有 age
作为它们的变量之一,并且我将 age
设置为刻度,以便我的海龟在达到一定数量的刻度时老化。然而,这会导致所有海龟同时老化(比如 ticks = 5 时),而不管它们是何时创建的。
有什么方法可以让创建海龟时的年龄开始吗?因此,如果海龟将在第 5 个刻度创建,它的年龄从零开始,但仍等于与第 1 个刻度相同的长度?
是的!对不起!这是我在将其放入实际模型之前一直在玩的代码
breed [kids kid]
breed [adults adult]
breed [elderlies elderly]
turtles-own [age
z]
to setup
clear-all
create-kids 10
[setxy random-xcor random-ycor]
set-default-shape kids "fish"
create-adults 10
[setxy random-xcor random-ycor]
set-default-shape adults "person"
set-default-shape elderlies "cow"
clear-output
reset-ticks
end
to go
ask kids [birthday
move]
ask adults [birthday
reproduce-adults
move]
tick
end
to birthday
set age ticks
if age > 5 [set breed adults]
if age > 10 [set breed elderlies]
if age > 15 [die]
end
to reproduce-adults
set z random 100
if z > 65
[ hatch-kids 1]
end
to move
rt random 360
fd 1
end
在您的 go
过程中,包括 ask turtles [increment-age]
,其中
to increment-age
set age (1 + age)
end
如果您希望 age
等于自海龟创建以来的刻度数,Alan 的解决方案很好。如果您想要不同的年龄衡量标准,可以将该数字除以另一个数字。例如,如果刻度表示月,则可以除以 12 得到年。
另一种方法涉及添加 birth-tick
——海龟 "born" 所在的刻度——作为 turtles-own
变量。假设您想要每 5 个刻度增加年龄。那么你可以这样写increment-age
:
to increment-age
let age-in-ticks birth-tick - ticks
if (age-in-ticks > 0) and (age-in-ticks mod 5 = 0) [
set age (1 + age)
]
end
包含mod
的表达式测试自出生以来的刻度数是否能被5整除。
编辑:我应该澄清一下,您需要在创建每个海龟时将 birth-tick
设置为 ticks
的值。
我让我的海龟拥有 age
作为它们的变量之一,并且我将 age
设置为刻度,以便我的海龟在达到一定数量的刻度时老化。然而,这会导致所有海龟同时老化(比如 ticks = 5 时),而不管它们是何时创建的。
有什么方法可以让创建海龟时的年龄开始吗?因此,如果海龟将在第 5 个刻度创建,它的年龄从零开始,但仍等于与第 1 个刻度相同的长度?
是的!对不起!这是我在将其放入实际模型之前一直在玩的代码
breed [kids kid]
breed [adults adult]
breed [elderlies elderly]
turtles-own [age
z]
to setup
clear-all
create-kids 10
[setxy random-xcor random-ycor]
set-default-shape kids "fish"
create-adults 10
[setxy random-xcor random-ycor]
set-default-shape adults "person"
set-default-shape elderlies "cow"
clear-output
reset-ticks
end
to go
ask kids [birthday
move]
ask adults [birthday
reproduce-adults
move]
tick
end
to birthday
set age ticks
if age > 5 [set breed adults]
if age > 10 [set breed elderlies]
if age > 15 [die]
end
to reproduce-adults
set z random 100
if z > 65
[ hatch-kids 1]
end
to move
rt random 360
fd 1
end
在您的 go
过程中,包括 ask turtles [increment-age]
,其中
to increment-age
set age (1 + age)
end
如果您希望 age
等于自海龟创建以来的刻度数,Alan 的解决方案很好。如果您想要不同的年龄衡量标准,可以将该数字除以另一个数字。例如,如果刻度表示月,则可以除以 12 得到年。
另一种方法涉及添加 birth-tick
——海龟 "born" 所在的刻度——作为 turtles-own
变量。假设您想要每 5 个刻度增加年龄。那么你可以这样写increment-age
:
to increment-age
let age-in-ticks birth-tick - ticks
if (age-in-ticks > 0) and (age-in-ticks mod 5 = 0) [
set age (1 + age)
]
end
包含mod
的表达式测试自出生以来的刻度数是否能被5整除。
编辑:我应该澄清一下,您需要在创建每个海龟时将 birth-tick
设置为 ticks
的值。