299 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:
...
# Указатель мыши скрывается.
pygame.mouse.set_visible(False)
Вызов
set_visible()
со значением
False
приказывает Pygame скрыть указатель,
когда он находится над окном игры.
После завершения игры указатель должен появляться снова, чтобы игрок мог на-
жать кнопку
Play
для запуска новой игры. Эту задачу решает следующий код:
alien_invasion.py def _ship_hit(self):
"""Обрабатывает столкновение корабля с пришельцем."""
if self.stats.ships_left > 0:
...
else:
self.stats.game_active = False
pygame.mouse.set_visible(True)
Указатель снова появляется сразу же после того, как игра становится неактивной,
что происходит в
_ship_hit()
. Внимание к подобным деталям сделает вашу игру
более профессиональной, а игрок сможет сосредоточиться на игре вместо того,
чтобы разбираться в сложностях пользовательского интерфейса.
УПРАЖНЕНИЯ 14.1. Запуск игры клавишей P: так как в Alien Invasion игрок управляет кораблем с кла-
виатуры, для запуска игры также лучше использовать клавиатуру. Добавьте код, с которым
игрок сможет запустить игру нажатием клавиши
P
. Возможно, часть кода из
_check_play_
button()
стоит переместить в функцию
start_game()
, которая будет вызываться из
_check_
play_button()
и
_check_keydown_events()
.
14.2. Стрельба по мишени: создайте у правого края экрана прямоугольник, который двига-
ется вверх и вниз с постоянной скоростью. У левого края располагается корабль, который
перемещается вверх и вниз игроком и стреляет по движущейся прямоугольной мишени.
Добавьте кнопку
Play
для запуска игры. После трех промахов игра заканчивается, а на экра-
не снова появляется кнопка
Play
. Нажатие этой кнопки перезапускает игру.
Повышение сложности
В текущей версии после того, как весь флот пришельцев будет уничтожен, игрок
переходит на новый уровень, но сложность игры остается неизменной. Давайте
немного оживим игру и усложним ее; для этого скорость игры будет повышаться
каждый раз, когда игрок уничтожает весь флот.