我有一些netlogo代码,我想更具描述性。 所以而不是:
MOVE-TO ONE-OF PATCHES WITH [ PCOLOR = BLUE ]
它会说:
MOVE-TO ONE-OF PATCHES WITH [ WATER ]
在java中我会创建一个枚举来完成这个。我怎么能在Netlogo中做到这一点?
答案 0 :(得分:3)
Alan的答案很好,但我也会考虑创建补丁变量而不是依赖补丁颜色的可能性。例如:
patches-own [ water? ]
如果你为每个水补丁设置为true
,你可以说:
move-to one-of patches with [ water? ]
这样做的主要原因是您可能想要在某些时候更改水斑的颜色:例如,使它们变得稍暗或变浅,或者使用颜色暂时突出显示具有其他特征的斑块。
分离表示和程序语义通常是很好的做法。
实现此目的的另一种不同方法是在安装过程中使用水补丁创建代理集。例如,假设您将water-patches
声明为全局变量,您可以这样做:
set water-patches patches with [ pcolor = blue ]
然后你可以这样做:
move-to one-of water-patches
如果更改修补程序的颜色,water-patches
代理程序集不会受到影响。它也可能更快一些,因为你只构造一次而不是一遍又一遍地过滤所有补丁。
答案 1 :(得分:2)
to-report water ;patch proc
report pcolor = blue
end
答案 2 :(得分:2)
patches-own
[ water?
]
to setup
ask patches
[ set water? FALSE
if random-float 1 < 0.2
[ set water? TRUE
set pcolor blue
]
]
end
在这种结构中,每个补丁都有一个真/假变量,表示它是水(如果为真)。然后,您可以直接使用ask patches with [water?] []
等语句。您还可以设置一个全局变量来保存补丁的补丁集,然后生成ask water-patches []
如果您有多种类型的土地风格(例如水,沙,土壤,岩石......),那么您可能更容易找到颜色,因为您不希望所有这些都有单独的变量。尽管如此,你可以拥有一个土地风格的属性,并拥有ask patches with [ type = "water"]