Timer for Python game

前端 未结 10 1810
伪装坚强ぢ
伪装坚强ぢ 2021-01-31 02:38

I\'m trying to create a simple game where the point is to collect as many blocks as you can in a certain amount of time, say 10 seconds. How can I get a timer to begin ticking a

相关标签:
10条回答
  • 2021-01-31 02:57
    import time
    
    now = time.time()
    future = now + 10
    while time.time() < future:
        # do stuff
        pass
    

    Alternatively, if you've already got your loop:

    while True:
        if time.time() > future:
            break
        # do other stuff
    

    This method works well with pygame, since it pretty much requires you to have a big main loop.

    0 讨论(0)
  • 2021-01-31 02:59

    In this example the loop is run every second for ten seconds:

    import datetime, time
    then = datetime.datetime.now() + datetime.timedelta(seconds=10)
    while then > datetime.datetime.now():
        print 'sleeping'
        time.sleep(1)
    
    0 讨论(0)
  • 2021-01-31 02:59

    For a StopWatch helper class, here is my solution which gives you precision on output and also access to the raw start time:

    class StopWatch:
        def __init__(self):
            self.start()
        def start(self):
            self._startTime = time.time()
        def getStartTime(self):
            return self._startTime
        def elapsed(self, prec=3):
            prec = 3 if prec is None or not isinstance(prec, (int, long)) else prec
            diff= time.time() - self._startTime
            return round(diff, prec)
    def round(n, p=0):
        m = 10 ** p
        return math.floor(n * m + 0.5) / m
    
    0 讨论(0)
  • 2021-01-31 03:04

    New to the python world!
    I need a System Time independent Stopwatch so I did translate my old C++ class into Python:

    from ctypes.wintypes import DWORD
    import win32api
    import datetime
    
    class Stopwatch:
    
        def __init__(self):
            self.Restart()
    
        def Restart(self):
            self.__ulStartTicks = DWORD(win32api.GetTickCount()).value
    
        def ElapsedMilliSecs(self):
            return DWORD(DWORD(win32api.GetTickCount()).value-DWORD(self.__ulStartTicks).value).value
    
        def ElapsedTime(self):
            return datetime.timedelta(milliseconds=self.ElapsedMilliSecs())
    

    This has no 49 days run over issue due to DWORD math but NOTICE that GetTickCount has about 15 milliseconds granularity so do not use this class if your need 1-100 milliseconds elapsed time ranges.

    Any improvement or feedback is welcome!

    0 讨论(0)
  • 2021-01-31 03:09

    I use this function in my python programs. The input for the function is as example:
    value = time.time()

    def stopWatch(value):
        '''From seconds to Days;Hours:Minutes;Seconds'''
    
        valueD = (((value/365)/24)/60)
        Days = int (valueD)
    
        valueH = (valueD-Days)*365
        Hours = int(valueH)
    
        valueM = (valueH - Hours)*24
        Minutes = int(valueM)
    
        valueS = (valueM - Minutes)*60
        Seconds = int(valueS)
    
    
        print Days,";",Hours,":",Minutes,";",Seconds
    
    
    
    
    start = time.time() # What in other posts is described is
    
    ***your code HERE***
    
    end = time.time()         
    stopWatch(end-start) #Use then my code
    
    0 讨论(0)
  • 2021-01-31 03:09

    The threading.Timer object (documentation) can count the ten seconds, then get it to set an Event flag indicating that the loop should exit.

    The documentation indicates that the timing might not be exact - you'd have to test whether it's accurate enough for your game.

    0 讨论(0)
提交回复
热议问题