Как вывести на экран время, проведенное в игре

В отличие от renpy.get_game_runtime () мой способ не сбрасывает время при перезапуске игры или при выходе в меню. Время считается всегда. Но лучше добавить изображение таймера в главное меню, чтобы при запуске начался отсчет, а при выходе счетчик сохранился в постоянные данные.

init python:
    import datetime
    # время старта текущей сессии игры = время последней проверки
    persistent.game_last_time = datetime.datetime.now()
    # общее время в игре в секундах
    if persistent.gametime is None:
        persistent.gametime = 0
    # функция для отображения текущего общего времени в игре
    def show_gametime(st, at):
        # сколько прошло со времени последней проверки
        t = datetime.datetime.now()
        dt = t - persistent.game_last_time
        # запоминаем текущее время, как время последней проверки
        persistent.game_last_time = t
        # суммируем время в игре со временем с последней проверки
        persistent.gametime += dt.total_seconds() # в секундах
        # переводим секунды в часы, минуты, секунды
        minutes, seconds = divmod(int(persistent.gametime), 60)
        hours, minutes = divmod(minutes, 60)
        # переводим текст в изображение
        # с форматированием (добавлением нулей, если число не двузначное)
        img = Text("%0*d:%0*d:%0*d" % (2, hours, 2, minutes, 2, seconds))
        # на выходе изображение со временем
        return img, .1
init:
    # привязываем функцию к динамическому изображению,
    # чтобы счетчик тикал без обновления экранов
    image gametime = DynamicDisplayable(show_gametime)

screen scr_game_time:
    # эту же строку можно добавить и в главное меню:
    add "gametime" align(.95, .05)

# для сброса времени в игре:
# $ persistent.gametime = 0
# или привязать к кнопке:
# textbutton _("Сброс времени") action SetField(persistent, "gametime", 0)

# Игра начинается здесь.
label start:
    show screen scr_game_time
    "Текст игры."
    return

Комментарии