Как создать таймер обратного отсчета в NetLogo
Это общая схема реализации таймера обратного отсчета.Это относится как к обратному отсчету в реальном времени, так и к обратному отсчету времени моделирования.
Реализация переменной, содержащей оставшееся время или прошедшее время.
Переменная обычно является глобальной переменной, если только у каждого агента нет собственного обратного отсчета.Тогда переменная будет переменной -own'd агента.
globals [ count-down ]
;; or
turtles-own [ count-down ]
Я думаю, что лучше всего отслеживать оставшееся время.Переменная обратного отсчета инициализируется с продолжительностью обратного отсчета.Это позволяет (в игре) легко реализовывать бонусы, которые увеличивают обратный отсчет, и штрафы, которые его уменьшают, просто добавляя или отбирая из оставшегося времени.Отслеживание «фактического» времени, когда истекает обратный отсчет (с использованием timer + duration
или чего-то подобного), как правило, менее полезно, особенно если ваша игра может быть приостановлена.Могут возникнуть нежелательные эффекты, которые вам придется кодировать.
Реализуйте процедуру для инициализации обратного отсчета.
to setup-timer
set count-down 30 ;; a 30 tick timer
;; if you have a display of the remaining time,
;; you might want to initialize it here, for example:
ask patch max-pxcor max-pycor
[ set plabel-color white
set plabel count-down
]
end
;; this example is for global count-down.
;; for a per-agent count-down, each agent would need
;; to initialize its own count-down variable
Внедрить процедуру для уменьшения оставшегося времени.
to decrement-timer
set count-down count-down - 1
end
Внедрить процедуру, чтобы проверить, истек ли обратный отсчет.
to-report timer-expired?
report ( count-down <= 0 )
end
Реализовать способ отображения оставшегося или прошедшего времени.Например:
Используйте метку патча, чтобы показать время:
to update-timer-display
ask patch max-pxcor max-pycor [ set plabel count-down ]
end
используйте специально определенную черепаху с формой часов, чтобы показатьвремя истекает.Примеры этого существуют в библиотеке моделей NetLogo
Реализация действия, которое происходит, когда истекает таймер.
Для использованиятаймер обратного отсчета в вашей программе:
При необходимости инициализируйте таймер обратного отсчета (например, когда начинается игра или раунд игры).
Измените и проверьте таймер.
Повторяющиеся события
Есливам нужен способ вызывать повторяющиеся события каждые N тиков, вы можете просто использовать оператор mod
со счетчиком ticks
в своей процедуре go
:
if ticks mod 30 = 0 [ perform-recurring-event ]
Вышестрока кода заставит процедуру perform-recurring-event
запускаться каждый раз, когда счетчик ticks
достигнет 0 или кратен 30. Другими словами, он будет запускаться каждые 30 ticks
.