我正在学习NetLogo并且对某些我找不到答案的特定点有疑问。总的来说,我正在尝试编写一个具有以下功能的程序:
我开始只根据库中包含的程序移动第一个标志。
在这部分中,我试图创建不同位置的不同城市。
to setup
clear-all
set-default-shape houses "house"
;; CREATE-ORDERED-<BREEDS> distributes the houses evenly
create-ordered-houses number-of-city
[ setxy 5 4 ] ;; B
create-ordered-houses number-of-city
[ setxy 1 4 ] ;; C
create-ordered-houses number-of-city
[ setxy 11 6 ] ;; D
在这部分我试图创建标志
create-people number-of-people [
setxy -8 10 ;; A city for first flag
set target one-of houses
facexy 5 4
这是我试图理解的部分(从库中复制)。这是关于第一面旗帜的移动。
ask people [
;; if at target, choose a new random target
if distance target = 0
[ set target one-of houses
face target ]
;; move towards target. once the distance is less than 1,
;; use move-to to land exactly on the target.
ifelse distance target < 1
[ move-to target ]
[ fd 1 ]
当我使用此代码运行时,第一个标志移动到错误的位置。我在这张照片中解释了我的问题。
答案 0 :(得分:0)
我认为您正在调整只有一个可能目标的代码。在该代码中,可以使用one-of
来选择目标,因为只有一个选择。然而,在你的改编中,有不止一个选择。所以当你在第二个代码块中创建标志时......
set target one-of houses
facexy 5 4
...你从四个房子中的任何一个选择一个随机目标,然后面对房子B(即5 4)。让我们说随机选择(one-of
)选择了房子C.你的标志向B移动,因为你告诉它要面对(5 4)然后向前移动,但你对它是否接近的测试是距离到达目标(即,如果那是随机选择的那个,则到C的距离)。
尝试将该段代码更改为:
set target one-of other houses
facexy target
此代码将使标志转到随机选择的房屋,而不是他们当前所在的房屋。由于您实际上希望它们按特定顺序排列,因此您必须执行某些操作,例如为每个房屋命名(即创建houses-own
属性以标识每个房屋),然后让标志执行类似{ {1}}。但是,在完成有关移动工作的所有操作后,请进行此更改。你一次添加一点点的一般方法是正确的 - 让它移动到任何目标,然后担心移动到正确的目标。