Design patterns 海龟以图案移动(Netlogo)

Design patterns 海龟以图案移动(Netlogo),design-patterns,move,netlogo,patch,Design Patterns,Move,Netlogo,Patch,下午好,我正试着让我的海龟们在一组4个蓝色斑块之间移动。我可以让他们到达那些补丁,但在那之后他们就呆在那里,我需要的是他们不断地移动(为了)到他们右边的下一个蓝色补丁。我不知道怎么做 这是我要说的代码的一部分: to move-turtles ask turtles [while [[pcolor] of patch-here != blue] [ face min-one-of patches with [pcolor = blu

下午好,我正试着让我的海龟们在一组4个蓝色斑块之间移动。我可以让他们到达那些补丁,但在那之后他们就呆在那里,我需要的是他们不断地移动(为了)到他们右边的下一个蓝色补丁。我不知道怎么做

这是我要说的代码的一部分:

to move-turtles

    ask turtles 
      [while [[pcolor] of patch-here != blue]
         [
           face min-one-of patches with [pcolor = blue ] [ distance myself ]
           forward 1
         ]
      ]  
    tick
    end

提前,谢谢

你说得对-使用
循环时,你的海龟会被卡在它们到达的第一个蓝色斑块上,因为如果它们踏上相邻的斑块,它们会立即想移回最近的蓝色斑块(它们刚刚离开的那块)。此外,while循环中发生的所有事情都发生在一个刻度内-如果您只是想让它们移动到最近的蓝色补丁作为设置的一部分,只需使用
移动到
。如果它们移动到最近的蓝色区域对您很重要,那么这里最好使用
If
语句,而不是
while

此外,您正在描述两种不同的运动“模式”。首先,你想让海龟移动到一个你想让它们跟随的回路。然后,如果他们在该电路中,您希望他们遵循一条有序的路径,以电路中的下一个蓝色补丁为目标,然后移动到该补丁。因此,设置两个单独的过程并在适当的时间调用它们可能更容易。如果海龟知道下一步应该去哪里(当前目标)以及应该执行哪种运动模式,这可能也会有所帮助。因此,您可以设置海龟自己的变量,例如:

turtles-own [
  on-circuit?
  my-target 
]
确保在设置中设置这些变量,使其不是未定义变量的默认“0”:

to setup
  ca
  reset-ticks
  ask (patch-set patch 5 5 patch 5 -5 patch -5 5 patch -5 -5 ) [
    set pcolor blue
  ]

  crt 1  [

    set on-circuit? false   ;;; so a starting turtle knows which movement procedure to use
    set my-target nobody    
    setxy random 30 - 15 random 30 - 15    
    pd
  ]

end
然后,您可以运行
go
过程,这样,如果海龟的“on circuit”(接通电路)为假,它们将尝试进入电路,如果“on circuit”(接通电路)为真,它们将在电路中行走

现在,您可以执行
进入电路
行走电路
过程。我将向您展示如何设置我的
到达线路
,但看看您是否可以计算出
行走线路的其余部分

to get-to-circuit

  set my-target min-one-of other patches with [pcolor = blue ] [ distance myself ]
  face my-target
  fd 1
  if distance my-target < 1 [
    move-to my-target 
    ;;; This lets the turtle know it can switch to "walk-circuit" on the next tick 
    set on-circuit? true   
    set heading one-of [ 0 90 180 270 ] 
  ]
end


to walk-circuit
  if  my-target =  nobody [
    set my-target one-of ( other patches with [ pcolor = blue ] ) in-cone 10 180
  ]
?
?
? ...
进入电路
使用[pcolor=blue][距离我自己]
面对我的目标
fd 1
如果距离我的目标<1[
移动到我的目标
这让乌龟知道它可以在下一个滴答声时切换到“行走回路”
设置为电路?正确
设置标题[0 90 180 270]
]
结束
巡回赛
如果我的目标是没有人[
将我的目标设置为锥10 180中的一个(其他[pcolor=blue]面片)
]
?
?
? ...
to get-to-circuit

  set my-target min-one-of other patches with [pcolor = blue ] [ distance myself ]
  face my-target
  fd 1
  if distance my-target < 1 [
    move-to my-target 
    ;;; This lets the turtle know it can switch to "walk-circuit" on the next tick 
    set on-circuit? true   
    set heading one-of [ 0 90 180 270 ] 
  ]
end


to walk-circuit
  if  my-target =  nobody [
    set my-target one-of ( other patches with [ pcolor = blue ] ) in-cone 10 180
  ]
?
?
? ...