Kelian
Kelian

Reputation: 13

How do I spread a color between neighbouring patches?

We are designing a classroom in Netlogo that looks like this:

Classroom

The person represents the teacher walking around in the classroom, the grey patches represent empty seats, the green patches represent seats with concentrated students and the red patches represent seats with unconcentrated students. We want to 'spread' the lack of concentration as a 'disease' to the neighbouring GREEN patches. We found some lines of code that almost did what we want:

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

But this would eventually turn all patches grey, so we tried to change it into this:

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

This line gives the following error: 'OF expected input to be a turtle agentset or patch agentset or turtle or patch but got NOBODY instead.'

Does any of you know how to fix this?

Upvotes: 0

Views: 952

Answers (1)

Luke C
Luke C

Reputation: 10291

The error you're getting comes up because you're telling green patches to change their color to one of their neighbors that is red, but not all green patches necessarily have red neighbors. In such a case when you tell a green patch "change your color to one of your neighbors that is red" the green patch goes, "well, among my neighbors there is nobody with that color." The special agentset nobody is then returned, and nobody has no color for the original green patch to access!

I think you might have an easier time of this by going the other way- that is, having the red patches be the ones that spread. For example, with this example setup:

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

You have a world with a bunch of concentrating students, and 5 troublemakers. Now, if you get your troublemakers to check if they have any neighboring patches who could be corrupted, you can have the lack of concentration spread outwards with increasing speed:

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

Upvotes: 1

Related Questions