我的补丁以绿色(65(,黑色(0(或随机基色启动。每 5 个刻度,我希望绿色的更改为随机的基色,黑色的保持黑色,随机颜色的变为绿色 (65( 或更改为另一种随机颜色(删除 55 种基色之一(。
实现这个最终功能(使用现有随机颜色补丁的子集(是我正在努力解决的问题。
我已经尝试了ifelse和不同的if语句,指定要求n-of某个数字补丁变成绿色,其余的变成随机颜色。这行不通。
to setup-patches ;;PATCHES
ask n-of 400 patches [ set pcolor 65]
ask n-of 600 patches [ set pcolor one-of remove 55 base-colors ]
end
......
to vary-patches
if ticks > 0 and ticks mod 5 = 0 [
ask patches [
if pcolor = 65 [
set pcolor one-of remove 55 base-colors ]
if pcolor = black [
set pcolor 0 ]
if pcolor = one-of remove 65 base-colors [
set pcolor ............................................. ]
end
你或多或少在那里,只是if pcolor = one-of remove 65 base-colors
有问题。每次评估该语句时,都会pcolor
与remove 65 base-colors
生成的列表中的随机one-of
进行比较 - 它不会检查是否在该组中找到pcolor
。为此,您需要member?
原语。例如,下面的轻微修改应该做你需要的:
to setup-patches ;;PATCHES
ca
ask n-of 400 patches [ set pcolor 65]
ask n-of 600 patches [ set pcolor one-of remove 55 base-colors ]
reset-ticks
end
to vary-patches
if ticks > 0 and ticks mod 5 = 0 [
ask patches [
if pcolor = 65 [
set pcolor one-of remove 55 base-colors ]
if member? pcolor remove 65 base-colors [
set pcolor one-of base-colors
]
]
]
tick
end
编辑:
to vary-patches
if ticks > 0 and ticks mod 5 = 0 [
ask patches [
ifelse pcolor = 65 [
set pcolor one-of remove 55 base-colors
] [
if member? pcolor remove 65 base-colors [
ifelse random-float 1 < ( 1 / 3 ) [
set pcolor one-of base-colors
] [
set pcolor 65
]
]
]
]
]
tick
end