Узнайте, как измерять время и использовать его для управления различными аспектами игры.

При разработке игр добавление событий, зависящих от времени, может значительно улучшить игровую механику и сделать игры более привлекательными для игроков. Включив таймеры, вы можете вводить испытания, создавать ограниченные по времени цели или добавлять ощущение срочности к определенным игровым элементам.

Создайте простую игру

Начните с создания простой игры, чтобы понять основы. Создайте игру, в которой игрок может перемещаться влево и вправо, и будет единая платформа. Создайте новый файл с именем простая-game.py и импортировать аркадный модуль, который предоставляет необходимые функции для создания игры.

Код, используемый в этой статье, доступен в этом Репозиторий GitHub и вы можете использовать его бесплатно по лицензии MIT.

Далее определите GameWindow класс, который является подклассом аркада. Окно. Внутри класса GameWindow определите __в этом__ метод, который инициализирует окно с указанными шириной, высотой и заголовком.

instagram viewer

on_key_press метод обнаруживает нажатия клавиш со стрелками влево или вправо. Нажатие влево уменьшает player_x на 10 единиц, а нажатие вправо увеличивает его на 10 единиц. Этот позволяет игроку двигаться горизонтально в окне игры.

Чтобы запустить игру, определите функцию main, создайте экземпляр GameWindow, вызовите метод setup для настройки окна игры и, наконец, запустите игровой цикл, используя аркада.run().

Проектирование структуры класса таймера

Чтобы реализовать таймеры в своей игре, вы можете создать класс Timer с необходимыми атрибутами и методами. Этот класс будет предоставлять функциональные возможности для запуска таймера, его остановки, получения прошедшего времени и проверки того, истек ли срок действия таймера. Вот базовая структура класса Timer:

Импортировать время

сортТаймер:
деф__в этом__(самостоятельно, продолжительность):
self.duration = продолжительность
self.start_time = 0
self.is_running = ЛОЖЬ

дефначинать(себя):
self.start_time = время.время()
self.is_running = Истинный

дефостанавливаться(себя):
self.is_running = ЛОЖЬ

дефget_elapsed_time(себя):
если self.is_running:
возвращаться time.time() - self.start_time
возвращаться0

дефis_expired(себя):
возвращаться self.get_elapsed_time() >= self.duration

Класс Timer принимает продолжительность параметр в секундах во время инициализации. Класс содержит такие атрибуты, как время начала для сохранения времени запуска таймера и бежит отслеживать состояние таймера.

начинать() метод устанавливает start_time в текущее время, используя время.время() и устанавливает is_running в Истинный. останавливаться() метод просто устанавливает is_running в ЛОЖЬ. получить_прошедшее_время() метод вычисляет прошедшее время, вычитая start_time из текущего времени.

Если таймер запущен, он возвращает прошедшее время; в противном случае возвращается 0. is_expired() Метод проверяет, больше ли прошедшее время длительности или равно ей, указывая на то, что таймер истек.

Реализация таймеров обратного отсчета

Чтобы продемонстрировать обратный отсчет в вашей игре, вы можете запускать таймер, когда игрок нажимает определенную клавишу, например пробел. Выведите обратный отсчет на консоль с помощью команды печати Python. Создайте новый файл с именем timer.py и добавьте код с этими обновлениями:

Импортировать время

сортGameWindow(аркада. Окно):
деф__в этом__(себя):
super().__init__(ШИРИНА, ВЫСОТА, «Простая игра»)
self.player_x = ШИРИНА // 2
self.player_y = ВЫСОТА // 2
self.timer = Таймер(10)

дефon_key_press(я, ключ, модификаторы):
если ключ == аркада.ключ. КОСМОС:
автотаймер.старт()

дефon_draw(себя):
# Существующий код
если self.timer.is_running:
прошедшее_время = self.timer.get_elapsed_time()
r_time = self.timer.duration - прошедшее_время
оставшееся_время = макс. (r_время, 0)
Распечатать(f"Обратный отсчет: {оставшееся время:.1ж} секунды")

Убедитесь, что вы видите окно терминала и окно игры одновременно. Затем нажмите пробел, и вы увидите обратный отсчет таймера:

Обработка событий таймера и запуск действий

Вы также можете активировать функцию, которая рисует прямоугольник когда таймер обратного отсчета истекает. Создайте новый файл с именем ручка-event.py и добавьте код со следующими обновлениями:

дефon_draw(себя):
# Существующий код
если self.timer.is_expired():
self.draw_rectangle()

дефрисовать_прямоугольник(себя):
arcade.draw_rectangle_filled (ШИРИНА // 2, ВЫСОТА // 2, 100, 100, красный)

Ниже приведен вывод:

Приостановка, сброс и возобновление таймера

Чтобы добавить функциональность для приостановки, сброса и возобновления таймера, вы можете расширить Таймер класс соответствующими методами. Вот пример:

сортТаймер:
# Существующий код

дефПауза(себя):
self.duration -= self.get_elapsed_time()
self.is_running = ЛОЖЬ

дефперезагрузить(себя):
self.start_time = 0
self.is_running = ЛОЖЬ

дефрезюме(себя):
self.start_time = время.время()
self.is_running = Истинный

Добавление визуальной обратной связи к таймеру

Чтобы обеспечить визуальную обратную связь для таймера, вы можете добавить текстовые или графические элементы на игровой экран. Создайте новый файл с именем визуальный.py и добавьте код со следующими обновлениями:

дефon_draw(себя):
# Существующий код
если self.timer.is_running:
текст = f"Обратный отсчет: {оставшееся время:.1ж} секунды"
arcade.draw_text (текст, 10, 10черный, 18)

Теперь вы увидите таймер непосредственно в окне игры, а не в консоли:

Включая дополнительные функции

Чтобы еще больше улучшить события, основанные на времени, вы можете рассмотреть возможность реализации следующих дополнительных функций в своих играх.

Усиления или бонусы, зависящие от времени

Введите усиления или бонусы, которые периодически появляются на протяжении всей игры. Эти бонусы могут предоставлять временные способности, дополнительные очки, повышенную скорость или улучшенное оружие.

Делая их ограниченными по времени, игроки должны стратегически собирать их в течение определенного периода времени, чтобы получить преимущество. Это добавляет волнения и вознаграждает за сообразительность.

Ограниченные по времени испытания

Создавайте ограниченные по времени задачи, в которых игроки должны выполнить задачу в течение определенного периода времени. Например, раздел головоломки или платформера, требующий решения за отведенное время.

Это заставляет игроков думать и действовать быстро, добавляя захватывающее чувство безотлагательности в игровой процесс. Успешное выполнение этих задач может открыть награды или продвинуть историю.

Временные препятствия или враги

Реализуйте временные препятствия или врагов, которые представляют угрозу для игрока. Например, движущиеся платформы, которые появляются и исчезают через равные промежутки времени, или враги, которые становятся непобедимыми на ограниченное время.

Игроки должны правильно рассчитать свои действия и движения, чтобы преодолеть эти препятствия или победить врагов до того, как истечет время. Это добавляет уровень стратегии и координации в игровой процесс.

Лучшие практики для событий, зависящих от времени

При внедрении событий, основанных на времени, в ваших играх важно следовать этим рекомендациям.

Тест и баланс

Тщательно проверяйте события, основанные на времени, чтобы убедиться, что они справедливы и сбалансированы. Точно настройте продолжительность, сложность и награды, чтобы получить удовольствие от игрового процесса.

Отзывы пользователей

Обеспечьте четкую и интуитивно понятную обратную связь с игроками относительно состояния таймера и любых событий, зависящих от времени. Добавление звуковых эффектов, визуальные индикаторы или текстовые подсказки могут помочь игрокам понять временные ограничения и последствия своих действий.

Стабильное измерение времени

Используйте единую систему измерения времени на протяжении всей игры. Например, используйте секунды в качестве единицы измерения для всех таймеров и вычислений, связанных со временем. Это обеспечивает последовательность и простоту понимания как для игроков, так и для разработчиков.

Обработка пограничных случаев

Рассмотрите сценарии, в которых игра может быть приостановлена, свернута или запущена в фоновом режиме. Аккуратно справляйтесь с такими ситуациями, чтобы сохранить точное время и предотвратить непреднамеренное поведение при возобновлении игры.

Следуя этим передовым методам, вы можете создавать привязанные ко времени события, которые улучшают игровой процесс, бросают вызов игрокам и обеспечивают сбалансированный и приятный игровой процесс.

Делаем игры более увлекательными с помощью событий, привязанных ко времени

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

Поэкспериментируйте с различными временными механиками, чтобы найти правильный баланс для своей игры, и не забывайте тестировать и повторять, чтобы максимизировать удовольствие и удовольствие.