Глава 13 • Осторожно, пришельцы!
Определение исполняемых частей игры
В файле
alien_invasion .py
необходимо определить части игры, которые должны вы-
полняться всегда, и те части, которые должны выполняться только при активной
игре:
alien_invasion.py
# Запуск основного цикла игры.
while True:
gf.check_events(ai_settings, screen, ship, bullets)
if stats.game_active:
ship.update()
gf.update_bullets(ai_settings, screen, ship, aliens, bullets)
gf.update_aliens(ai_settings, ship, aliens)
gf.update_screen(ai_settings, screen, ship, aliens, bullets)
В основном цикле всегда должна вызываться функция
check_events()
, даже если
игра находится в неактивном состоянии. Например, программа все равно долж-
на узнать о том, что пользователь нажал клавишу Q для завершения игры или
щелкнул на кнопке закрытия окна. Также экран должен обновляться в то время,
пока игрок решает, хочет ли он начать новую игру. Остальные вызовы функций
должны происходить только при активной игре, потому что в то время, когда игра
не активна, обновлять позиции игровых элементов не нужно.
В обновленной версии игра должна останавливаться после потери игроком по-
следнего корабля.
УПРАЖНЕНИЯ
13-6 . Конец игры: в коде из упражнения 13-5 (с . 274) подсчитывайте, сколько раз игрок
не поймал мяч . После трех промахов игра должна заканчиваться .
Итоги
В этой главе вы научились добавлять в игру большое количество одинаковых
элементов на примере флота пришельцев. Вы узнали, как использовать вложен-
ные циклы для создания сетки с элементами, а также привели игровые элементы
в движение, вызывая метод
update()
каждого элемента. Вы научились управлять
перемещением объектов на экране и обрабатывать различные события (например,
достижение края экрана). Вы также узнали, как обнаруживать коллизии и реаги-
ровать на них (на примере попаданий пуль в пришельцев и столкновений при-
шельцев с кораблем). В завершение главы рассматривалась тема ведения игровой
статистики и использования флага для проверки окончания игры.
В последней главе этого проекта будет добавлена кнопка
Play
, чтобы игрок мог
самостоятельно запустить свою первую игру, а также повторить игру после ее за-
вершения. После каждого уничтожения вражеского флота скорость игры будет
возрастать, а мы реализуем систему подсчета очков. В результате вы получите
полностью работоспособную игру!
14
Ведение счета
В этой главе построение игры Alien Invasion будет завершено. Мы добавим
кнопку
Play
для запуска игры по желанию игрока или перезапуска игры после
ее завершения. Мы также изменим игру, чтобы она ускорялась при переходе
игрока на следующий уровень, и реализуем систему подсчета очков. К концу
главы вы будете знать достаточно, чтобы заняться разработкой игр, сложность
которых нарастает по ходу игры и в которых реализована система подсчета
очков.
Добавление кнопки Play
В этом разделе мы добавим кнопку
Play
, которая отображается перед началом игры
и появляется после ее завершения, чтобы игрок мог сыграть снова.
В текущей версии игра начинается сразу же после запуска
alien_invasion .py
. После
очередных изменений игра будет запускаться в неактивном состоянии и предла-
гать игроку нажать кнопку
Play
для запуска. Для этого включите следующий код
в
game_stats .py
:
game_stats.py
def __init__(self, ai_settings):
"""Инициализирует статистику."""
self.ai_settings = ai_settings
self.reset_stats()
# Игра запускается в неактивном состоянии.
self.game_active = False
def reset_stats(self):
...
Итак, программа запускается в неактивном состоянии, а игру можно запустить
только нажатием кнопки
Play
.
Создание класса Button
Так как в Pygame не существует встроенного метода создания кнопок, мы напишем
класс
Button
для создания заполненного прямоугольника с текстовой надписью.
282
Достарыңызбен бөлісу: |