一只特定的乌龟必须在访问特定点后停止

One specific turtle must stop after visiting specific point

我正在研究 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 ]

当我 运行 使用此代码时,第一个标志移动到错误的位置。我在这张照片中解释了我的问题。

我的第一面旗帜的移动

我认为您正在改编只有一个可能目标的代码。在该代码中,可以使用 one-of 到 select 目标,因为只有一个选择。然而,在你的改编中,有不止一种选择。因此,当您在第二个代码块中创建标志时...

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

此代码将使旗帜随机 selected 的房子不是他们当前所在的房子。由于您实际上希望它们按特定顺序排列,因此您必须做一些事情,比如给每个房子一个名字(即创建一个 houses-own 属性来标识每个房子),然后让标志做一些事情,比如 set target house with [ name = 'B' ]。但是,请在了解有关移动工作的所有内容后进行此更改。您一次添加一点的一般方法是正确的 - 让它移动到任何目标,然后担心移动到正确的目标。