298
Глава 14 •
Ведение счета
❶
self.stats.reset_stats()
self.stats.game_active = True
# Очистка списков пришельцев и снарядов.
❷
self.aliens.empty()
self.bullets.empty()
# Создание нового флота и размещение корабля в центре.
❸
self._create_fleet()
self.ship.center_ship()
В точке
обновляется игровая статистика, вследствие чего игрок получает три
новых корабля. После этого флаг
game_active
переводится в состояние
True
(чтобы
игра началась сразу же после выполнения кода функции), группы
aliens
и
bullets
очищаются
,
создается новый флот, а корабль
выравнивается по центру
.
После этих изменений игра будет правильно переходить в исходное состояние при
каждом нажатии
Play
, и вы сможете сыграть столько раз, сколько вам захочется!
Блокировка
кнопки Play
У кнопки
Play
в нашем приложении есть одна проблема: область кнопки на экране
продолжает реагировать на щелчки, даже если кнопка
Play
не отображается. Если
случайно щелкнуть на месте кнопки
Play
после начала игры, то игра перезапустится!
Чтобы исправить этот недостаток, следует запускать игру только в том случае, если
флаг
game_active
находится в
состоянии
False
:
alien_invasion.py
def _check_play_button(self, mouse_pos):
"""Запускает новую игру при нажатии кнопки Play."""
❶
button_clicked = self.play_button.rect.collidepoint(mouse_pos)
❷
if button_clicked and not self.stats.game_active:
# Сброс игровой статистики.
self.stats.reset_stats()
...
Флаг
button_clicked
содержит значение
True
или
False
, а игра перезапускается
только в том случае, если пользователь нажал кнопку
Play
и
при этом
игра неактив-
на в настоящий момент
. Чтобы протестировать это поведение, запустите новую
игру и многократно щелкайте в том месте, где должна находиться кнопка
Play
. Если
все работает так, как положено, нажатия кнопки
Play
не должны влиять на ход игры.
Сокрытие
указателя мыши
Указатель мыши должен быть видимым, чтобы пользователь мог начать игру, но
после начала игры он только мешает. Чтобы исправить этот недостаток, мы скроем
указатель мыши после того, как игра станет активной. Это можно сделать в блоке
if
в конце
_check_play_button()
: