Добавление кнопки Play
285
for event in pygame.event.get():
if event.type == pygame.QUIT:
...
elif event.type == pygame.MOUSEBUTTONDOWN:
mouse_x, mouse_y = pygame.mouse.get_pos()
check_play_button(stats, play_button, mouse_x, mouse_y)
def check_play_button(stats, play_button, mouse_x, mouse_y):
"""Запускает новую игру при нажатии кнопки Play."""
if play_button.rect.collidepoint(mouse_x, mouse_y):
stats.game_active = True
Обновленное определение
check_events()
получает параметры
stats
и
play_button
.
Параметр
stats
будет использоваться для обращения к флагу
game_active
, а
play_
button
— для проверки того, была ли нажата кнопка
Play
.
Pygame обнаруживает событие
MOUSEBUTTONDOWN
, когда игрок щелкает в любой точке
экрана , но мы хотим ограничить игру, чтобы она реагировала только на щелчки
на кнопке
Play
. Для этого будет использоваться метод
pygame.mouse.get_pos()
,
возвращающий кортеж с координатами
x
и
y
точки щелчка . Эти значения пере-
даются функции
check_play_button()
, которая использует метод
collidepoint()
для проверки того, находится ли точка щелчка в пределах области, определяемой
прямоугольником кнопки
Play
. Если точка находится в пределах кнопки, флаг
game_active
переводится в состояние
True
, и игра начинается!
При вызове
check_events()
в
alien_invasion .py
должны передаваться два дополни-
тельных аргумента,
stats
и
play_button
:
alien_invasion.py
# Запуск основного цикла игры.
while True:
gf.check_events(ai_settings, screen, stats, play_button, ship,
bullets)
...
К этому моменту вы сможете запустить и сыграть полноценную игру. После за-
вершения игры значение
game_active
становится равным
False
, а кнопка
Play
снова
появится на экране.
Сброс игры
Только что написанный нами код работает при первом нажатии кнопки
Play
,
но не работает после завершения первой игры, потому что условия, приводящие
к окончанию игры, еще не были сброшены.
Чтобы игра сбрасывалась при каждом нажатии кнопки
Play
, необходимо сбросить
игровую статистику, стереть старых пришельцев и пули, построить новый флот
и вернуть корабль в центр нижней стороны:
game_functions.py
def check_play_button(ai_settings, screen, stats, play_button, ship, aliens,
bullets, mouse_x, mouse_y):
286 Глава 14 • Ведение счета
"""Запускает новую игру при нажатии кнопки Play."""
if play_button.rect.collidepoint(mouse_x, mouse_y):
# Сброс игровой статистики.
stats.reset_stats()
stats.game_active = True
# Очистка списков пришельцев и пуль.
aliens.empty()
bullets.empty()
# Создание нового флота и размещение корабля в центре.
create_fleet(ai_settings, screen, ship, aliens)
ship.center_ship()
Мы обновляем определение
check_play_button()
, чтобы в нем были доступны
объекты
ai_settings
,
stats
,
ship
,
aliens
и
bullets
. Эти объекты необходимы для
сброса настроек, изменившихся в ходе игры, и для обновления визуальных эле-
ментов игры.
В точке обновляется игровая статистика, вследствие чего игрок получает
три новых корабля. После этого флаг
game_active
переводится в состояние
True
(чтобы игра началась сразу же после выполнения кода функции), группы
aliens
и
bullets
очищаются , создается новый флот, а корабль выравнивается
по центру .
Для этого необходимо изменить определение
check_events()
, как и вызов
check_
play_button()
:
Достарыңызбен бөлісу: