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



Pdf көрінісі
бет141/238
Дата07.01.2022
өлшемі7,86 Mb.
#18670
түріКнига
1   ...   137   138   139   140   141   142   143   144   ...   238
Байланысты:
2 5343781172763690906

УПРАЖНЕНИЯ

13-3 .  Капли:  найдите  изображение  дождевой  капли  и  создайте  сетку  из  капель .  Капли 

должны постепенно опускаться вниз и исчезать у нижнего края экрана .

13-4 . Дождь: измените свой код в упражнении 13-3, чтобы при исчезновении ряда капель 

у нижнего края экрана новый ряд появлялся у верхнего края и начинал падение .

Уничтожение пришельцев

Итак, мы создали корабль и флот пришельцев — но, когда пули достигают пришель-

цев, они просто проходят насквозь, потому что программа не проверяет коллизии. 

В игровом программировании коллизией называется перекрытие игровых элемен-

тов. Чтобы пули сбивали пришельцев, метод 

sprite.groupcollide()

 используется 

для выявления коллизий между элементами двух групп.

Выявление коллизий

Когда пуля попадает в пришельца, программа должна немедленно узнать об этом, 

чтобы сбитый пришелец исчез с экрана. Для этого мы будем проверять коллизии 

сразу же после обновления позиции пули.

Метод 


sprite.groupcollide()

 сравнивает прямоугольник 

rect

 каждой пули с пря-



моугольником 

rect


 каждого пришельца и возвращает словарь с пулями и при-

шельцами, между которыми обнаружены коллизии. Каждый ключ в словаре 

представляет пулю, а ассоциированное с ним значение — пришельца, в которого 

попала пуля. (Этот словарь будет использоваться в реализации системы подсчета 

очков счета в главе 14.)



Уничтожение пришельцев    271

Для проверки коллизий в функции 

update_bullets()

 используется следующий код:



game_functions.py

def update_bullets(aliens, bullets):

"""Обновляет позиции пуль и удаляет старые пули."""

...


    # Проверка попаданий в пришельцев.

    # При обнаружении попадания удалить пулю и пришельца.

    collisions = pygame.sprite.groupcollide(bullets, aliens, True, True)

Новая строка сначала перебирает все пули в группе 

bullets

, а затем перебирает 

всех пришельцев в группе 

aliens


. Каждый раз, когда между прямоугольником 

пули и пришельца обнаруживается перекрытие, 

groupcollide()

 добавляет пару 

«ключ—значение» в возвращаемый словарь. Два аргумента 

True


 сообщают Pygame, 

нужно ли удалять столкнувшиеся объекты: пулю и пришельца. (Чтобы создать 

сверхмощную пулю, которая будет уничтожать всех пришельцев на своем пути, 

можно передать в первом аргументе 

False

, а во втором 



True

. Пришельцы, в которых 

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

края экрана.)

При вызове 

update_bullets()

 передается аргумент 

aliens


:

alien_invasion.py

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

while True:

gf.check_events(ai_settings, screen, ship, bullets)

ship.update()

       gf.update_bullets(aliens, bullets)

gf.update_aliens(ai_settings, aliens)

gf.update_screen(ai_settings, screen, ship, aliens, bullets)





Достарыңызбен бөлісу:
1   ...   137   138   139   140   141   142   143   144   ...   238




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

    Басты бет