我正在尝试在 NetLogo 中制作类似 Frogger 的游戏,我需要创建一个倒计时的计时器。但是,我查看了 Frogger 并使用了创建计时器的相同程序,但它不起作用。请指教。
1 回答
如何在 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 模型库中有这样的例子
实现计时器到期时发生的操作。
这完全取决于你。
这可能涉及重置计时器以进行另一个倒计时。
要在程序中使用倒数计时器,您必须:
在适当的情况下初始化倒计时计时器(例如游戏或一轮游戏开始时)。
更改并测试计时器。
这可能是每个“滴答”一次,或基于实时的计算。
- 减少任何合适的时间的倒计时。
- 如果需要,更新计时器的显示。
- 测试计时器以查看它是否已过期。
对过期的计时器采取行动。
;; a "once-per-tick" count-down decrement-timer update-timer-display if timer-expired? [ act-on-expired-timer ] ;; rest of the go procedure, then... tick ;; a "once-per-second" count-down every 1 ;; this block runs only once per second [ decrement-timer update-timer-display if timer-expired? [ act-on-expired-timer ] ] ;; the rest of the go procedure tick
重复事件
如果您需要一种在每 N 个滴答声中触发重复事件的方法,您可以在程序中简单地使用mod
带有ticks
计数器的运算符go
:
if ticks mod 30 = 0 [ perform-recurring-event ]
上面的代码行将导致程序perform-recurring-event
在每次ticks
计数器达到 0 或 30 的倍数时运行。换句话说,它将每 30 运行一次ticks
。