М97 Изучаем Python: программирование игр, визуализация данных, веб-приложения



Pdf көрінісі
бет208/334
Дата18.10.2023
өлшемі6,19 Mb.
#186390
1   ...   204   205   206   207   208   209   210   211   ...   334
Байланысты:
Изучаем Python

alien_invasion.py
def _update_aliens(self):
...
self.aliens.update()
# Проверка коллизий "пришелец — корабль".

if pygame.sprite.spritecollideany(self.ship, self.aliens):

print("Ship hit!!!")
Функция 
spritecollideany()
получает два аргумента: спрайт и группу. Функция 
пытается найти любой элемент группы, вступивший в коллизию со спрайтом, 
и останавливает цикл по группе сразу же после обнаружения столкнувшегося 
элемента. В данном случае он перебирает группу 
aliens
и возвращает первого 
пришельца, столкнувшегося с кораблем 
ship
.
Если ни одна коллизия не обнаружена, 
spritecollideany()
возвращает 
None

и блок 
if
в точке 

не выполняется. Если же будет обнаружен пришелец, столк-
нувшийся с кораблем, метод возвращает этого пришельца и выполняется блок 
if

выводится сообщение 
Ship
hit!!!

. При столкновении пришельца с кораблем 
необходимо выполнить ряд операций: удалить всех оставшихся пришельцев и сна-
ряды, вернуть корабль в центр и создать новый флот. Прежде чем писать код всех 
этих операций, необходимо убедиться в том, что решение с обнаружением коллизий 
с кораблем работает правильно. Вызов 
print()
всего лишь позволяет легко про-
верить правильность обнаружения коллизий.
Если вы запустите Alien Invasion, при столкновении пришельца с кораблем в тер-
минальном окне появляется сообщение 
Ship
hit!!!
. В ходе тестирования этого 
аспекта присвойте 
alien_drop_speed
более высокое значение (например, 50 или 
100), чтобы пришельцы быстрее добирались до вашего корабля.
Обработка столкновений с кораблем
Теперь нужно разобраться, что же происходит при столкновении пришельца с кора-
блем. Вместо того чтобы уничтожать экземпляр 
ship
и создавать новый, мы будем 
подсчитывать количество уничтоженных кораблей; для этого следует организовать 
сбор статистики по игре. (Статистика также пригодится для подсчета очков.)


Завершение игры


Достарыңызбен бөлісу:
1   ...   204   205   206   207   208   209   210   211   ...   334




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

    Басты бет