Книга «Изучаем Python»


Рис. 13.5. Пули уничтожают пришельцев! 272



Pdf көрінісі
бет166/266
Дата03.03.2023
өлшемі7,86 Mb.
#170986
түріКнига
1   ...   162   163   164   165   166   167   168   169   ...   266
Байланысты:
Изучаем Python. Программирование игр, визуализация данных, веб-приложения ( PDFDrive )

Рис. 13.5.
Пули уничтожают пришельцев!


272
Глава 13 • Осторожно, пришельцы!
Если запустить Alien Invasion сейчас, пришельцы, в которых попадает пуля, будут 
исчезать с экрана. На рис. 13.5 изображен частично уничтоженный флот.
Создание больших пуль для тестирования
Многие игровые возможности тестируются простым запуском игры, но не-
которые аспекты слишком утомительно тестировать в обычной версии игры. 
Например, чтобы проверить, правильно ли обрабатывается уничтожение по-
следнего пришельца, нам пришлось бы несколько раз сбивать всех пришельцев 
на экране.
Для тестирования конкретных аспектов игры можно изменить игровые настройки 
так, чтобы упростить конкретную область. Например, можно уменьшить экран, 
чтобы на нем было меньше пришельцев, или увеличить скорость пули и количество 
пуль, одновременно находящихся на экране.
Мое любимое изменение при тестировании Alien Invasion — использование 
сверхшироких пуль, которые остаются активными даже после попадания в при-
шельца (рис. 13.6). Попробуйте задать настройке 
bullet_width
значение 300 
и посмотрите, сколько времени вам понадобится для уничтожения флота при-
шельцев!
Такие изменения повышают эффективность тестирования, а заодно могут подска-
зать идеи для всевозможных игровых бонусов. (Только не забудьте восстановить 
нормальное состояние настроек после завершения тестирования.)
Рис. 13.6.
Сверхмощные пули упрощают тестирование
некоторых аспектов игры


Уничтожение пришельцев
273
Восстановление флота
Одна из ключевых особенностей Alien Invasion — бесконечные орды пришельцев: 
каждый раз, когда вы уничтожаете один флот, на его месте появляется другой.
Чтобы после уничтожения одного флота появлялся другой, сначала нужно убе-
диться в том, что группа 
aliens
пуста. Если она пуста, вызывается функция 
create_
fleet()
. Проверка будет выполняться в функции 
update_bullets()
, потому что 
именно здесь уничтожаются отдельные пришельцы:
game_functions.py
def update_bullets(ai_settings, screen, ship, aliens, bullets):
...
# Проверка попаданий в пришельцев.
# При обнаружении попадания удалить пулю и пришельца.
collisions = pygame.sprite.groupcollide(bullets, aliens, True, True)
 
if len(aliens) == 0:
# Уничтожение существующих пуль и создание нового флота.
 
bullets.empty()
create_fleet(ai_settings, screen, ship, aliens)
В точке 

программа проверяет, пуста ли группа 
aliens
. Если она пуста, то все 
существующие пули удаляются методом 
empty()
, который удаляет все существу-
ющие спрайты из группы 

. Вызов метода 
create_fleet()
снова заполняет экран 
пришельцами.
В определении 
update_bullets()
теперь появились дополнительные параметры 
ai_settings

screen
и 
ship
, поэтому вызов 
update_bullets()
в 
alien_invasion .py
не-
обходимо обновить:
alien_invasion.py
# Запуск основного цикла игры.
while True:
gf.check_events(ai_settings, screen, ship, bullets)
ship.update()
gf.update_bullets(ai_settings, screen, ship, aliens, bullets)
gf.update_aliens(ai_settings, aliens)
gf.update_screen(ai_settings, screen, ship, aliens, bullets)
Новый флот появляется сразу же после уничтожения текущего флота.
Ускорение пуль
Попытавшись стрелять по пришельцам в текущем состоянии игры, вы заметите, 
что движение пуль немного замедлилось. Дело в том, что Pygame теперь выполняет 
больший объем работы при каждом проходе цикла. Скорость пуль можно увели-
чить настройкой 
bullet_speed_factor
в 
settings .py
. Если увеличить это значение 
(например, до 3), пули снова будут двигаться по экрану с разумной скоростью:
settings.py
# Настройки пуль


274

Достарыңызбен бөлісу:
1   ...   162   163   164   165   166   167   168   169   ...   266




©engime.org 2024
әкімшілігінің қараңыз

    Басты бет