Сброс игры

We use cookies. Read the Privacy and Cookie Policy

Только что написанный нами код работает при первом нажатии кнопки 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, и вы сможете сыграть столько раз, сколько вам захочется!