2016-05-28 2 views
1

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