netlogo中的颜色渐进问题

时间:2015-08-03 15:02:43

标签: netlogo

我有三种不同的海龟:红色,白色和绿色。我想让这些海龟结合起来(就像关系中的人一样),然后解开。虽然红乌龟与绿色或白色乌龟相结合,但我希望补丁颜色有时会随机改变颜色,但由于某种原因,补丁颜色的颜色进展不起作用。

to go
  ask turtles
    [ if coupled? = true
        [ set couple-length couple-length + 1 ] ]
  ask turtles
    [ if coupled? = false
        [ move ] ]
  ask turtles
    [ if coupled? = false and shape = "person righty" and (random-float 10.0 < coupling-tendency)
        [ couple ] 
    let potential-intervener one-of (turtles-on neighbors) with [ green-dotter? = true]
    if (coupled? = true and potential-intervener != nobody and "person righty" = true)


[ifelse (random-float 10.0 < resting-tendency)

  [;;decides to stay
    ask potential-intervener [move-to patch-here] ;; this is possibly what is causing the lack of intervention?

    ; does not intervene, start the color progression
    ifelse (random-float 10.0 < intervening-tendency)
  [;; intervenes
    uncouple
  ]
    [set couple-length couple-length + 1 ;; increments the couple length by 1
    if (couple-length = 2)
    [
      ask patch-here [set pcolor yellow]
      ask patch-at -1 0 [set pcolor yellow] ]

    if (couple-length = 4)
    [
        ask patch-here [set pcolor orange]
        ask (patch-at -1 0) [set pcolor orange] ]

    if (couple-length = 6)
    [
      ask patch-here [set pcolor red]
      ask (patch-at -1 0) [set pcolor red] ] ]
  ]
  [
    ;;decides to move
    ask potential-intervener [move]

    set couple-length couple-length + 1 ;; increments the couple length by 1
    if (couple-length = 2)
    [
      ask patch-here [set pcolor yellow]
      ask patch-at -1 0 [set pcolor yellow] ]

    if (couple-length = 4)
    [
        ask patch-here [set pcolor orange]
        ask (patch-at -1 0) [set pcolor orange] ]

    if (couple-length = 6)
    [
      ask patch-here [set pcolor red]
      ask (patch-at -1 0) [set pcolor red] ] ]
  ]
  ; will green dotter intervene?
  ifelse (random-float 10.0 < intervening-tendency)
  [;; intervenes
    uncouple
  ]
  [;; does not intervene, start the color progression
    set couple-length couple-length + 1 ;; increments the couple length by 1
    if (couple-length = 2)
    [
      ask patch-here [set pcolor yellow]
      ask patch-at -1 0 [set pcolor yellow] ]

    if (couple-length = 4)
    [
        ask patch-here [set pcolor orange]
        ask (patch-at -1 0) [set pcolor orange] ]

    if (couple-length = 6)
    [
      ask patch-here [set pcolor red]
      ask (patch-at -1 0) [set pcolor red] ] ] 
]

  check-sliders
  tick
end

1 个答案:

答案 0 :(得分:1)

首先,您的行if (coupled? = true and potential-intervener != nobody and "person righty" = true)位于仅通过if coupled? = false and shape = "person righty" and (random-float 10.0 < coupling-tendency)到达的命令块内。也就是说,它没有达到,因为耦合?需要既是真的又是假的。更好的格式化会立即清除。我已经重新格式化了代码的顶部部分,因此您可以看到:

to go
  ask turtles
  [ ifelse coupled?
    [ set couple-length couple-length + 1 ] ]
    [ move
      if shape = "person righty" and (random-float 10.0 < coupling-tendency)
        [ couple ]
      let potential-intervener one-of (turtles-on neighbors) with [ green-dotter?]

      if (coupled? and potential-intervener != nobody and "person righty")
        [ ifelse (random-float 10.0 < resting-tendency)
          [;;decides to stay
            ask potential-intervener [move-to patch-here]

其他一些说明。您不需要说if coupled? = true,只需说if coupled?即可。由于你有三次相同的着色代码,最好只将它作为一个单独的程序,并从三个位置调用它,因此更容易更改。