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

时间:2010-11-28 12:53:49

标签: timer netlogo

我正在尝试在NetLogo中制作类似Frogger的游戏,我需要创建一个倒计时的计时器。但是,我查看了Frogger并使用了创建计时器的相同程序,但它不起作用。请指教。

1 个答案:

答案 0 :(得分:6)

如何在NetLogo中创建倒计时器

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

  1. 实施变量以包含剩余时间或已用时间。

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

      globals [ count-down ]
      ;; or
      turtles-own [ count-down ]
      
    • 我认为通常最好跟踪剩余时间。倒计数变量初始化为倒计时的持续时间。这样可以轻松(在游戏中)实现延长倒计时的奖励,以及通过简单地从剩余时间添加或减少来减少它的惩罚。跟踪倒计时到期的“实际”时间(使用timer + duration或类似的东西)通常不太有用,特别是如果您的游戏可以暂停。您可能需要编码不受欢迎的效果。

  2. 实施一个程序来初始化倒计时。

    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
    
  3. 实施一个程序来减少剩余时间。

    to decrement-timer
       set count-down count-down - 1
    end
    
  4. 实施一个程序来测试倒计时是否已过期。

    to-report timer-expired?
       report ( count-down <= 0 )
    end
    
  5. 实施一种显示剩余时间或已用时间的方法。例如:

    • 使用补丁标签显示时间:

      to update-timer-display
         ask patch max-pxcor max-pycor [ set plabel count-down ]
      end
      
    • 使用具有时钟形状的特别定义的乌龟来显示流逝的时间。 NetLogo模型库中存在此示例

  6. 实施计时器到期时发生的操作。

    • 这完全取决于你。

    • 这可能涉及将计时器重置为另一次倒计时。

  7. 要在程序中使用倒计时器,您必须:

    1. 在适当的时候(例如游戏或游戏的一轮开始时)初始化倒计时器。

    2. 更改并测试计时器。

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

        1. 减少适当时间的倒计时。
        2. 如果需要,请更新计时器的显示。
        3. 测试计时器以查看它是否已过期。
        4. 对过期的计时器采取行动。

          ;; 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
          
    3. 重复活动

      如果您需要的是每N个刻度触发重复事件的方法,您可以在mod程序中将ticks运算符与go计数器一起使用:< / p>

      if ticks mod 30 = 0 [ perform-recurring-event ]
      

      上述代码行会导致程序perform-recurring-event每次ticks计数器达到0或30的倍数时运行。换句话说,它将每30 ticks运行一次。