Я не понимаю, почему что-то появилось в моем коде netlogo, но, наконец, я обнаружил, что глобальные переменные меняют значения с черепах на черепах, возможно ли это? Я заметил это, потому что у меня есть 2 значения для печати в моем коде, например:
breed [players player]
breed [balls ball]
globals [
TURNS;
TEAM-OWNER
]
to setup
clear-all
reset-ticks
set TURNS 0
setup-players
setup-ball
end
to setup-ball
create-balls 1 [
setxy 0 0
set color orange
set shape "bug"
set size 2.5
]
end
to setup-players
create-players 5 [
setxy 0 0
set color white
set shape "bug"
set size 2.5
]
end
to go
set TURNS TURNS + 1
print word "this is the turns " TURNS
print ( word " values " TEAM-OWNER)
if ticks >= 1000 [ stop ]
ask players [
print ( word " values " TEAM-OWNER)
fd 2
set TEAM-OWNER "red"
]
ask balls [
fd 2
set TEAM-OWNER "black"
]
end
Это возможно? Глобальные значения не меняют значения во всех черепахах? Вот такая печать у меня получилась:
this is the turns 1
values 0
values 0
values red
values red
values red
values red
this is the turns 2
values black
values black
values red
values red
values red
values red
Это не было похоже на черный 1 раз? а красный другой раз? И почему я получаю 2 черных?
@Jasper Я поставил весь код
Глобальная переменная является глобальной - существует только ОДНА ее копия, и все черепахи извлекают и изменяют одну и ту же копию.
Посмотрите на этот кусок кода:
ask players [
print ( word " values " TEAM-OWNER)
fd 2
set TEAM-OWNER "red"
]
ask balls [
fd 2
set TEAM-OWNER "black"
]
Сначала каждый из ваших игроков перемещается вперед на две единицы расстояния, а затем устанавливает значение КОМАНДА-ВЛАДЕЛЕЦ на «красный». Если у вас 10 игроков, глобальная переменная TEAM-OWNER становится красной 10 раз. Затем каждый из ваших шаров перемещается вперед на две единицы расстояния и устанавливает переменную TEAM-OWNER в «черный». Пока у вас есть один (или несколько) шаров, глобальная переменная будет перезаписана.
Глобальная переменная используется для того, что одинаково для каждой черепахи в вашей модели.
хорошо, но почему в первую очередь значения 0 печатаются 2 раза? и то же самое произошло с черными значениями?
Потому что в начале второго хода первое, что вы делаете, это печатаете КОМАНДНОЕ ЗНАЧЕНИЕ (это первое «черное»), затем первый игрок печатает его снова (второе), прежде чем изменить его на «красное» для другого. 4 игрока для печати.
Так не должно быть - глобалы у всех одинаковые. Вам нужно будет добавить больше кода, чтобы люди заметили проблему — объявление
globals
, любые объявленияturtles-own
илиbreeds-own
, а также любой код, который игроки запускают до или послеprint
MY-GLOBAL-VALUE
, поскольку они могут изменить его (скорее всего, причина ).