Сброс игры

Только что написанный нами код работает при первом нажатии кнопки Play, но не работает после завершения первой игры, потому что условия, приводящие к окончанию игры, еще не были сброшены.

Чтобы игра сбрасывалась при каждом нажатии кнопки Play, необходимо сбросить игровую статистику, стереть старых пришельцев и пули, построить новый флот и вернуть корабль в центр нижней стороны:

game_functions.py

def check_play_button(ai_settings, screen, stats, play_button, ship, aliens,

. . . .bullets, mouse_x, mouse_y):

"""Запускает новую игру при нажатии кнопки Play."""

if play_button.rect.collidepoint(mouse_x, mouse_y):

. . . .# Сброс игровой статистики.

(1) . . . .stats.reset_stats()

stats.game_active = True

. . . .

. . . .# Очистка списков пришельцев и пуль.

(2) . . . .aliens.empty()

. . . .bullets.empty()

. . . .

. . . .# Создание нового флота и размещение корабля в центре.

(3) . . . .create_fleet(ai_settings, screen, ship, aliens)

. . . .ship.center_ship()

Мы обновляем определение check_play_button(), чтобы в нем были доступны объекты ai_settings, stats, ship, aliens и bullets. Эти объекты необходимы для сброса настроек, изменившихся в ходе игры, и для обновления визуальных элементов игры.

В точке (1) обновляется игровая статистика, вследствие чего игрок получает три новых корабля. После этого флаг game_active переводится в состояние True (чтобы игра началась сразу же после выполнения кода функции), группы aliens и bullets очищаются (2), создается новый флот, а корабль выравнивается по ­центру (3).

Для этого необходимо изменить определение check_events(), как и вызов check_play_button():

game_functions.py

def check_events(ai_settings, screen, stats, play_button, ship, aliens,

. . . .bullets):

"""Обрабатывает нажатия клавиш и события мыши."""

for event in pygame.event.get():

if event.type == pygame.QUIT:

...

elif event.type == pygame.MOUSEBUTTONDOWN:

mouse_x, mouse_y = pygame.mouse.get_pos()

(1) . . . . . .check_play_button(ai_settings, screen, stats, play_ button, ship,

. . . . . . . .aliens, bullets, mouse_x, mouse_y)

Определению check_events() необходим параметр aliens, который будет передаваться check_play_button(). Также обновляется вызов check_play_button() с включением соответствующих аргументов (1) .

Теперь обновите вызов check_events() в alien_invasion.py, чтобы в нем передавался аргумент aliens:

alien_invasion.py

# Запуск основного цикла игры.

while True:

. .gf.check_events(ai_settings, screen, stats, play_button, ship,

. . . .aliens, bullets)

...

После этих изменений игра будет правильно переходить в исходное состояние при каждом нажатии Play, и вы сможете сыграть столько раз, сколько вам захочется!