如何让乌龟回到特定的协调状态而不会卡在那里?

How to make turtle go back to specific coordination without getting stuck there?

我试图让海龟在使用某种颜色(这里是黄色)的补丁后回到特定的坐标(世界中心),我写了下面的代码,我的海龟走回去但然后它一直向前移动 1 步后回到那个协调。我的代码肯定有问题。

我不想让乌龟跳起来,我需要他们走回去做进一步的程序。

breed [miners miner]
breed [bases base]

to setup
  clear-all
  reset-ticks
  create-miners 1
  create-bases 1
  ask bases
  [set size 1]
  ask miners
  [set size 1
    set heading random 360]
  ask patches
  [set pcolor green]
  place-golds
end

to go
  ask miners
  [right random 360
    forward random 4
    get-gold]
  tick
end
to place-golds
  ask n-of 10 patches [ set pcolor yellow ]
end

to get-gold
  ask miners
  [if pcolor = yellow
    [set pcolor green
      back-to-base]
  ]    
end

to back-to-base  
  loop [
    ifelse  on-base?  [ stop ]
    [
     facexy 0 0
     fd 1
    ]
  ]
end
to-report on-base?
  report (xcor = 0 AND ycor = 0)
end

我也使用 while 循环对 back-to-base 过程进行了尝试,但问题仍未解决。

to back-to-base1
 while [xcor != 0 AND ycor != 0]
      [
        facexy 0 0
        fd 1
        if xcor = 0 AND ycor = 0 
          [stop] 
    ]
end

您的基本问题是您正在使用 while 循环,它将 运行 直到满足为止。这意味着一旦你让一只乌龟回到基地,它就会看起来像在跳跃,因为它一直移动直到它到达那里。处理这种情况的最简单方法是为每只乌龟设置一个变量来跟踪它是去淘金、回家还是去别的地方。

所以,首先你需要创建是否已经找到黄金的变量,并在创建矿工时将其设置为false

miners-own [gold-done?]

to setup
  clear-all
  reset-ticks
  create-miners 1
  [ set size 1
    set heading random 360
    set gold-done? false        ; new line here
  ]
  create-bases 1 
  [ set size 1
  ]
  ask patches [set pcolor green]
  place-golds
end

然后你可以修改你的程序,在发现黄金的地方触发 return:

to get-gold
  ask miners
  [ if pcolor = yellow
    [ set pcolor green
      set gold-done? true     ; new line here
    ]
  ]    
end

你的 go 程序(这是每个时间单位发生的事情)让矿工移动:

to go
  ask miners with [ not gold-done? ]
  [ right random 360
    forward random 4
    get-gold
  ]
  ask miners with [ gold-done? ]
  [ face patch 0 0
    forward 1
  ]
  tick
end

您还需要编写一些代码来检查是否已到达目的地以及下一步该做什么。