Temporizador de cuenta regresiva en Pygame

Comencé a usar pygame y quiero hacer un juego simple. Uno de los elementos que necesito es el temporizador de cuenta atrás. ¿Cómo puedo hacer el tiempo de cuenta atrás (por ejemplo, 10 segundos) en PyGame?

En esta página encontrará lo que está buscando en http://www.pygame.org/docs/ref/time.html#pygame.time.get_ticks
Usted descarga los ticks una vez antes de comenzar la cuenta regresiva (lo que puede ser un disparador en el juego, el evento clave, lo que sea). Por ejemplo:

start_ticks=pygame.time.get_ticks() #starter tick while mainloop: # mainloop seconds=(pygame.time.get_ticks()-start_ticks)/1000 #calculate how many seconds if seconds>10: # if more than 10 seconds close the game break print (seconds) #print how many seconds 

Otra forma fácil es simplemente usar el sistema de eventos de pygame.

Aquí hay un ejemplo simple:

 import pygame pygame.init() screen = pygame.display.set_mode((128, 128)) clock = pygame.time.Clock() counter, text = 10, '10'.rjust(3) pygame.time.set_timer(pygame.USEREVENT, 1000) font = pygame.font.SysFont('Consolas', 30) while True: for e in pygame.event.get(): if e.type == pygame.USEREVENT: counter -= 1 text = str(counter).rjust(3) if counter > 0 else 'boom!' if e.type == pygame.QUIT: break else: screen.fill((255, 255, 255)) screen.blit(font.render(text, True, (0, 0, 0)), (32, 48)) pygame.display.flip() clock.tick(60) continue break 

introduzca la descripción de la imagen aquí

pygame.time.Clock.tick devuelve el tiempo en milisegundos desde la última llamada a clock.tick ( delta time , dt ), por lo que puede usarlo para boost o disminuir una variable del temporizador.

 import pygame as pg def main(): pg.init() screen = pg.display.set_mode((640, 480)) font = pg.font.Font(None, 40) gray = pg.Color('gray19') blue = pg.Color('dodgerblue') # The clock is used to limit the frame rate # and returns the time since last tick. clock = pg.time.Clock() timer = 10 # Decrease this to count down. dt = 0 # Delta time (time since last tick). done = False while not done: for event in pg.event.get(): if event.type == pg.QUIT: done = True timer -= dt if timer <= 0: timer = 10 # Reset it to 10 or do something else. screen.fill(gray) txt = font.render(str(round(timer, 2)), True, blue) screen.blit(txt, (70, 70)) pg.display.flip() dt = clock.tick(30) / 1000 # / 1000 to convert to seconds. if __name__ == '__main__': main() pg.quit() 

Hay varias maneras de hacer esto, aquí hay una. Python no tiene un mecanismo de interrupciones que yo sepa.

 import time, datetime timer_stop = datetime.datetime.utcnow() +datetime.timedelta(seconds=10) while True: if datetime.datetime.utcnow() > timer_stop: print "timer complete" break 

Hay muchas maneras de hacer esto y es una de ellas.

 import pygame,time, sys from pygame.locals import* pygame.init() screen_size = (400,400) screen = pygame.display.set_mode(screen_size) pygame.display.set_caption("timer") time_left = 90 #duration of the timer in seconds crashed = False font = pygame.font.SysFont("Somic Sans MS", 30) color = (255, 255, 255) while not crashed: for event in pygame.event.get(): if event.type == QUIT: crashed = True total_mins = time_left//60 # minutes left total_sec = time_left-(60*(total_mins)) #seconds left time_left -= 1 if time_left > -1: text = font.render(("Time left: "+str(total_mins)+":"+str(total_sec)), True, color) screen.blit(text, (200, 200)) pygame.display.flip() screen.fill((20,20,20)) time.sleep(1)#making the time interval of the loop 1sec else: text = font.render("Time Over!!", True, color) screen.blit(text, (200, 200)) pygame.display.flip() screen.fill((20,20,20)) pygame.quit() sys.exit() 

Esto es en realidad bastante simple. ¡Gracias a Pygame por crear una biblioteca simple!

 import pygame x=0 while x < 10: x+=1 pygame.time.delay(1000) 

¡Eso es todo al respecto! ¡Diviértete con pygame!