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



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


Глава 13 • Осторожно, пришельцы!
Метод 
check_aliens_bottom()
проверяет, есть ли хотя бы один пришелец, добрав-
шийся до нижнего края экрана. Условие выполняется, когда атрибут 
rect.bottom
пришельца больше или равен атрибуту 
rect.bottom
экрана 

. Если пришелец 
добрался до низа, вызывается функция 
_ship_hit()
. Если хотя бы один пришелец 
добрался до нижнего края, проверять остальных уже не нужно, поэтому после вы-
зова 
_ship_hit()
цикл прерывается.
Этот метод вызывается из 
_update_aliens()
:
alien_invasion.py
def _update_aliens(self):
...
# Проверка коллизий "пришелец — корабль".
if pygame.sprite.spritecollideany(self.ship, self.aliens):
self._ship_hit()
# Проверить, добрались ли пришельцы до нижнего края экрана.
self._check_aliens_bottom()
Метод 
_check_aliens_bottom()
вызывается после обновления позиций всех при-
шельцев и после проверки столкновений «пришелец — корабль» 

. Теперь новый 
флот будет появляться как при столкновении корабля с пришельцем, так и в том 
случае, если кто-то из пришельцев смог добраться до нижнего края экрана.
Конец игры
Программа Alien Invasion уже на что-то похожа, но игра длится бесконечно. Значе-
ние 
ships_left
просто продолжает уходить в отрицательную бесконечность. Доба-
вим в 
GameStats
новый атрибут — флаг 
game_active
, который завершает игру после 
потери последнего корабля. Этот флаг устанавливается в конце метода 
__init__()
в GameStats:
game_stats.py
def __init__(self, ai_game):
...
# Игра Alien Invasion запускается в активном состоянии.
self.game_active = True
Добавим в 
ship_hit()
код, который сбрасывает флаг 
game_active
в состояние 
False
при потере игроком последнего корабля:


Достарыңызбен бөлісу:
1   ...   208   209   210   211   212   213   214   215   ...   334




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

    Басты бет