Инициализация и завершение таймера Черепах
В процедуре я хочу запустить таймер для каждой черепахи (агента), которая когда изменит свою форму с "shape2" на "shape1", и этот таймер истечет через 10 тиков, и форма изменится обратно на "shape1" . моя процедура работает, только когда я нажимаю "идти", она работает только для первых 10 отсчитанных тиков. после этого это не называется. Я назвал эту процедуру именем "Изменить" в блоке GO.
to change
let test one-of breed-here with [ shape = "shape2" ]
if test != nobody and [ ticks ] of test = 10
[ask breed with [ shape = "shape2" ]
[ set shape "shape1" ]
]
end
оператор блока GO:
to Go
ask breed with [ shape = "shape2" ] [ change ]
end
1 ответ
Вот иллюстрация с использованием патчей. (Цвета стоят за формы.)
patches-own [shape-timer]
globals [s1 s2]
to setup
ca
set s1 blue ;"shape" 1
set s2 red ;"shape" 2
ask patches [set pcolor one-of (list s1 s2)]
end
to temp-change-shape
set pcolor s2
set plabel "temp"
set shape-timer 10
end
to update
set shape-timer (shape-timer - 1)
if (shape-timer = 0) [
set plabel ""
show "changing back!"
set pcolor s1
]
end
to go
ask patches with [pcolor = s2 and shape-timer > 0] [
update
]
ask one-of patches with [pcolor = s1] [
temp-change-shape
]
end
Более хорошее решение использует table
продление, сопоставление дат (отметок) с агентами, которые необходимо обновлять на каждую дату. (Таким образом, вам не нужно проверять каждый агент каждый тик, чтобы узнать, пора ли его обновить.)