Инициализация и завершение работы таймера Turtles

В процедуре я хочу запустить таймер для каждой черепахи (агента), который при изменении своей формы с «shape2» на «shape1», и этот таймер истекает через 10 тиков, а форма снова меняется на «shape1». моя процедура работает только тогда, когда я нажимаю «go», она работает только для первых 10 подсчитанных тиков. после этого не вызывается. Я назвал эту процедуру именем «Change» в блоке 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

person Waseem Adil    schedule 28.05.2016    source источник


Ответы (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, сопоставляя даты (тики) с агентами, которые необходимо обновлять в каждую дату. (Таким образом, вам не нужно проверять каждого агента каждый тик, чтобы узнать, не пора ли его обновить.)

person Alan    schedule 28.05.2016