alien_invasion.py def _check_events(self):
"""Обрабатывает нажатия клавиш и события мыши."""
for event in pygame.event.get():
if event.type == pygame.QUIT:
...
❶
elif event.type == pygame.MOUSEBUTTONDOWN:
❷
mouse_pos = pygame.mouse.get_pos()
❸
self._check_play_button(mouse_pos)
Pygame обнаруживает событие
MOUSEBUTTONDOWN
, когда игрок щелкает в любой точке
экрана
, но мы хотим ограничить игру, чтобы она реагировала только на щелчки
на кнопке
Play
. Для этого будет использоваться метод
pygame.mouse.get_pos()
,
возвращающий кортеж с координатами
x
и
y
точки щелчка
. Эти значения пере-
даются новому методу
_check_play_button()
.
Ниже приведен код
_check_play_button()
, который я решил разместить после
_check_events()
:
alien_invasion.py def _check_play_button(self, mouse_pos):
"""Запускает новую игру при нажатии кнопки Play."""
❶
if self.play_button.rect.collidepoint(mouse_pos):
self.stats.game_active = True
Метод
collidepoint()
используется для проверки того, находится ли точка щелчка
в пределах области, определяемой прямоугольником кнопки Play
. Если точка
находится в пределах кнопки, флаг
game_active
переводится в состояние
True
и игра начинается!
К этому моменту вы сможете запустить и сыграть полноценную игру. После за-
вершения игры значение
game_active
становится равным
False
, а кнопка
Play
снова
появится на экране.
Сброс игры
Только что написанный нами код работает при первом нажатии кнопки
Play
, но не
работает после завершения первой игры, потому что условия, приводящие к окон-
чанию игры, еще не были сброшены.
Чтобы игра сбрасывалась при каждом нажатии кнопки
Play
, необходимо сбросить
игровую статистику, стереть старых пришельцев и снаряды, построить новый флот
и вернуть корабль в центр нижней стороны: