-2

I've been working on a game; in which one of the main components is a countdown timer- however this timer is delayed and I am not able to deduce why. I would like it to decrement once per second, however it seems to be decrementing at once every 6 seconds.

Here is how I have the timer set up:

loops = 0
minute = 1
tens = 0
ones = 0 

#Timer Calculation
    screen.blit(cloudSky, (0,0))
    if go == True:
        loops = loops + 1
        if (loops % 60)== 0:
            if ones == 0 and tens == 0 and minute != 0:
                tens = 6
                ones = 0
                minute = minute - 1

            if ones == 0 and tens != 0:
                ones = 9
                tens = tens - 1

            elif ones != 0:
                ones = ones - 1

            elif tens == 0 and ones == 0:
                tens = 5
                minute = minute - 1

            elif ones == 0 and tens != 0:
                tens = tens - 1


            if minute <= 0 and tens == 0 and ones == 0:
                go = False

I print it on the screen with the code below:

#Draw Clock Time
time = timeFont.render(str (minute)+ ":" + str (tens) + str (ones), True, WHITE)
screen.blit(time, (750,10))

Any help is greatly appreciated!

Student
  • 39
  • 1
  • 11

1 Answers1

0

It might be caused by the fact that you rely on going trough this Timer Calculation exactly 60 times / second. If you update it 10 times / second it will add 1 second for every 6 seconds of real time. You should probably use something like time module to time it more precisely.

import time

# To remember current time
timer = time.time() # timer = 1497737106.913825

# To read time since the clock started
seconds_passed = time.time() - timer # seconds_passed = 11.117798089981079

# To get a tuple containing calculated time (minutes, seconds, etc.)
time_passed = time.gmtime(seconds_passed)
# time_passed = time.struct_time(tm_year=1970, tm_mon=1, tm_mday=1,
#               tm_hour=0, tm_min=0, tm_sec=11, tm_wday=3, tm_yday=1, tm_isdst=0)
# As you can see year returned is 1970 because 0 means start of Unix Epoch time
# but you don't use it anyway

Since it's named tuple, you can use index:

time_passed[0] # 1970

or names:

time_passed.tm_year # 1970

https://docs.python.org/3/library/time.html#time.time

Szymon
  • 460
  • 6
  • 17