Timer 如何在NetLogo中创建倒计时计时器?

Timer 如何在NetLogo中创建倒计时计时器?,timer,netlogo,Timer,Netlogo,我正在尝试在NetLogo中制作一个类似青蛙的游戏,我需要创建一个倒计时的计时器。然而,我查看了Frogger并使用了创建计时器的相同过程,但它不起作用。请告知 如何在NetLogo中创建倒计时 这是如何实现倒计时计时器的概述。这既适用于实时倒计时,也适用于模拟时间倒计时 to setup-timer set count-down 30 ;; a 30 tick timer ;; if you have a display of the remaining time, ;;

我正在尝试在NetLogo中制作一个类似青蛙的游戏,我需要创建一个倒计时的计时器。然而,我查看了Frogger并使用了创建计时器的相同过程,但它不起作用。请告知

如何在NetLogo中创建倒计时 这是如何实现倒计时计时器的概述。这既适用于实时倒计时,也适用于模拟时间倒计时

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
  • 实现一个变量以包含剩余时间或经过的时间

    • 变量通常是全局变量,除非每个代理都必须有自己的倒计时。然后,该变量将是代理的自有变量

      globals [ count-down ]
      ;; or
      turtles-own [ count-down ]
      
    • 我认为通常最好跟踪剩余时间。使用倒计时的持续时间初始化倒计时变量。这使得(在游戏中)通过简单地在剩余时间内增加或减少倒计时,就可以轻松实现延长倒计时的奖金和减少倒计时的惩罚。跟踪倒计时到期的“实际”时间(使用
      计时器+持续时间
      或类似方法)通常不太有用,尤其是当游戏可以暂停时。可能会出现不希望出现的效果,您必须对其进行编码

  • 执行初始化倒计时的过程

    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
    
  • 使用带有时钟形状的特殊定义的乌龟来显示时间流逝。NetLogo模型库中有这方面的示例

  • 执行计时器过期时发生的操作

    • 这完全取决于你

    • 这可能涉及重置计时器以进行另一次倒计时

    • 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
      
  • 要在程序中使用倒计时,您必须:
  • 在适当的情况下初始化倒计时(例如游戏或游戏的一轮开始时)

  • 更换并测试计时器

    • 这可能是每“滴答”一次,或者是基于实时的计算

    • 在任何适当的时间表上减少倒计时
    • 如果需要,更新计时器的显示
    • 测试计时器以查看其是否已过期
    • 按过期的计时器操作

      ;; 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 ]
    

    上述代码行将导致每当
    滴答声
    计数器达到0或30的倍数时,程序
    执行重复事件
    运行。换句话说,它将每隔30次
    滴答声运行一次

    你必须比“它不工作”更具体。如果你想用秒而不是滴答声来计算计时器,那么
    每一次
    关键字将非常有帮助。