Как я могу распределить цвет между соседними патчами? - PullRequest
0 голосов
/ 25 октября 2018

Мы проектируем класс в Нетлого, который выглядит следующим образом:

Класс

Человек представляет учителя, который ходит по классу, серые пятна - пустыеместа, зеленые пятна представляют места с сконцентрированными студентами, а красные пятна представляют места с неконцентрированными студентами.Мы хотим «распространить» недостаток концентрации как «болезнь» на соседние ЗЕЛЕНЫЕ участки.Мы нашли несколько строк кода, которые почти сделали то, что мы хотели:

ask patches with [pcolor = green] [set pcolor [pcolor] of one-of neighbors4]

Но это в конечном итоге превратило бы все патчи в серый, поэтому мы попытались изменить его на следующее:

ask patches with [pcolor = green] [set pcolor [pcolor] of one-of neighbors4 with [pcolor = red]]

Этов строке выдается следующая ошибка: «OF ожидаемый ввод - это набор агентов черепах или набор патчей, или черепаха, или патч, но вместо этого он получил НИКТО».

Кто-нибудь из вас знает, как это исправить?

1 Ответ

0 голосов
/ 26 октября 2018

Ошибка, которую вы получаете, возникает потому, что вы говорите зеленым пятнам изменить их цвет на одного из их соседей, который является красным, но не у всех зеленых пятен обязательно есть красные соседи.В таком случае, когда вы говорите зеленому пятну «измените свой цвет на одного из ваших соседей, который является красным», зеленое пятно идет, «ну, среди моих соседей есть nobody с этим цветом».Затем возвращается специальный набор агентов nobody, а nobody не имеет цвета для доступа к исходному зеленому патчу!

Я думаю, что вам может быть легче, если вы пойдете другим путем - то есть, когда красные пятна будут теми, которые распространяются.Например, в этом примере настройки:

to setup 
  ca
  resize-world 0 25 0 25
  ask patches [ 
    set pcolor green
  ]
  ask n-of 5 patches [ set pcolor red ]
  reset-ticks
end

У вас есть мир с группой концентрирующихся студентов и 5 нарушителями спокойствия.Теперь, если вы заставите своих нарушителей спокойствия проверить, есть ли у них соседние участки, которые могут быть повреждены, у вас может быть недостаток концентрации, распространяющийся наружу с увеличивающейся скоростью:

to colorswap 
  ask patches with [ pcolor = red ] [
    ; See if there is any possible neighbor patch
    ; to whom I can spread my lack of concentration
    let target one-of neighbors4 with [ pcolor = green ]

    ; if the target exists, have them change their color
    if target != nobody [
      ask target [ 
        set pcolor red
      ]
    ]
  ]
end
...