В моей игре у меня работает хронометр. Хронометр определен в классе «Играть» (который используется для всего, что связано с тем, когда игрок управляет персонажем), а не в классе «Победа» (целью которого является отображение изображения при прохождении уровня). Оба класса определены в файле main.py. Я хочу напечатать на финальном экране победы (игрок побеждает, когда персонаж достигает определенной позиции) время, которое потребовалось игроку, чтобы добраться до этой позиции. Как бы я это сделал? Спасибо. К сожалению, я не могу показать код.
Я сделал небольшой фрагмент кода, который может помочь вам построить этот таймер.
import pygame
pygame.init() # init is important there because it starts the timer
screen = pygame.display.set_mode((500, 500))
running = True
victory = False
class Play:
def __init__(self):
# all infos about player
self.time = pygame.time.get_ticks()
self.end_time = 0
def update_timer(self):
# here we get the actual time after 'init' has been executed
self.time = pygame.time.get_ticks()
# we divide it by 1000 because we want seconds instead of ms
self.end_time += self.time / 1000
return self.end_time
class Victory:
def __init__(self):
self.play = Play()
def pin_up_timer(self):
# Here I chose to print it inside of the console but feel free to pin it up wherever you want.
print(self.play.update_timer())
vic = Victory()
pl = Play()
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
# here I chose to end the game when I press KeyUp but you can do something else to stop it
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_UP:
victory = True
# I update timer every frame and BEFORE checking if victory is True in order to get a result more accurate
pl.update_timer()
# if victory is True, I pin up the timer and I end the code
if victory:
vic.pin_up_timer()
running = False
pygame.display.flip()
pygame.quit()
Если вы хотите, чтобы таймер запускался только в том случае, если игрок переместился, определите ключ и добавьте переменную, например:
# (this variable outside of the main loop)
moved = False
# left or anything else
if event.key == pygame.K_LEFT:
moved = True
if moved:
pl.update_timer()
Вам нужно каким-то образом передать информацию из класса
Play
в классVictory
. Это может быть возможно по-разному: при установкеVictory
, вызове метода для него, установке атрибута. Это настолько открытый вопрос, что мы не можем дать вам ответ.