Обработка выстрелов

We use cookies. Read the Privacy and Cookie Policy

В файле game_functions.py необходимо внести изменения в метод check_keydown_events(), чтобы при нажатии клавиши «пробел» происходил выстрел. Изменять check_keyup_events() не нужно, потому что при отпускании клавиши ничего не происходит. Также необходимо изменить update_screen() и вывести каждую пулю на экран перед вызовом flip(). Ниже представлены соответствующие ­изменения в game_functions.py:

game_functions.py

...

from bullet import Bullet

(1) def check_keydown_events(event, ai_settings, screen, ship, bullets):

...

(2) . .elif event.key == pygame.K_SPACE:

. . . .# Создание новой пули и включение ее в группу bullets.

. . . .new_bullet = Bullet(ai_settings, screen, ship)

. . . .bullets.add(new_bullet)

...

(3)def check_events(ai_settings, screen, ship, bullets):

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

for event in pygame.event.get():

...

elif event.type == pygame.KEYDOWN:

. . . . . .check_keydown_events(event, ai_settings, screen, ship, bullets)

...

(4)def update_screen(ai_settings, screen, ship, bullets):

...

. .# Все пули выводятся позади изображений корабля и пришельцев.

(5) . .for bullet in bullets.sprites():

. . . .bullet.draw_bullet()

ship.blitme()

...

Рис. 12.3. Экран игры после серии выстрелов

Группа bullets передается check_keydown_events() (1) . Когда игрок нажимает пробел, создается новая пуля (экземпляр Bullet с именем new_bullet), которая добавляется в группу bullets (2) методом add(); код bullets.add(new_bullet) сохраняет новую пулю в группе bullets.

Группу bullets необходимо добавить в число параметров в определении check_events() (3), а также передать в аргументе при вызове check_keydown_events().

Параметр bullets передается функции update_screen() (4), которая рисует пули на экране. Метод bullets.sprites() возвращает список всех спрайтов в группе bullets. Чтобы нарисовать все выпущенные пули на экране, программа перебирает спрайты в bullets и вызывает для каждого draw_bullet() (5).

Если запустить alien_invasion.py сейчас, вы сможете двигать корабль влево и вправо и выпускать сколько угодно пуль. Пули перемещаются вверх по экрану и исчезают при достижении верхнего края (рис. 12.3). Размер, цвет и скорость пуль можно изменить при помощи настроек в settings.py.