【问题标题】:Turtles moving in a pattern (Netlogo)海龟以一种模式移动(Netlogo)
【发布时间】:2017-08-27 13:26:49
【问题描述】:

下午好,我正试图让我的海龟在一组 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

提前,谢谢!

【问题讨论】:

    标签: design-patterns move netlogo patch


    【解决方案1】:

    你是对的 - 使用while 循环,你的海龟将被困在它们到达的第一个蓝色补丁上,因为如果它们踩到相邻的补丁,它们会立即想要回到最近的蓝色补丁(他们刚离开的一个)。此外,while 循环中发生的所有事情都发生在一个滴答声中——如果您只是希望它们移动到最近的蓝色补丁作为设置的一部分,只需使用move-to。如果他们移动到最近的蓝色补丁对您很重要,那么在这里使用if 语句而不是while 可能会更好。

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

    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 程序,以便海龟在“在线”时尝试进入电路?是错误的,如果他们的“在线”,他们会走电路?是真的。

    to go
    
      ask turtles [
        ifelse on-circuit? = false [  ;;; do this if turtle is not yet on the circuit
          get-to-circuit
        ]
        [  ;;;  do this if the turtle has been designated as on the circuit
          walk-circuit
        ]
      ]
      tick
    
    end
    

    现在您可以创建get-to-circuitwalk-circuit 程序。我会告诉你我是如何设置我的get-to-circuit,但看看你是否能弄清楚walk-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
      ]
    ?
    ?
    ? ...
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-16
      • 1970-01-01
      • 2021-09-18
      • 2019-03-28
      • 1970-01-01
      相关资源
      最近更新 更多