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


Глава 13 • Осторожно, пришельцы! Экземпляр  GameStats создается в  __init__() : alien_invasion.py



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

288
Глава 13 • Осторожно, пришельцы!
Экземпляр 
GameStats
создается в 
__init__()
:
alien_invasion.py
def __init__(self):
...
self.screen = pygame.display.set_mode(
(self.settings.screen_width, self.settings.screen_height))
pygame.display.set_caption("Alien Invasion")
# Создание экземпляра для хранения игровой статистики.
self.stats = GameStats(self)
self.ship = Ship(self)
...
Экземпляр создается после создания игрового окна, но перед определением других 
игровых элементов (например, корабля).
Когда пришелец сталкивается с кораблем, программа уменьшает количество 
оставшихся кораблей на 1, уничтожает всех существующих пришельцев и снаряды, 
создает новый флот и возвращает корабль в середину экрана. Также игра ненадолго 
приостанавливается, чтобы игрок заметил столкновение и перестроился перед по-
явлением нового флота.
Большая часть этого кода будет вынесена в новый метод 
_ship_hit()
. Этот метод 
вызывается из 
_update_aliens()
при столкновении пришельца с кораблем:
alien_invasion.py
def _ship_hit(self):
"""Обрабатывает столкновение корабля с пришельцем."""
# Уменьшение ships_left.

self.stats.ships_left -= 1
# Очистка списков пришельцев и снарядов.

self.aliens.empty()
self.bullets.empty()
# Создание нового флота и размещение корабля в центре.

self._create_fleet()
self.ship.center_ship()
# Пауза.

sleep(0.5)
Новый метод 
_ship_hit()
управляет реакцией игры на столкновение корабля 
с пришельцем. Внутри 
_ship_hit()
число оставшихся кораблей уменьшается 
на 1 

, после чего происходит очистка групп 
aliens
и 
bullets

.
Затем программа создает новый флот и выравнивает корабль по центру нижнего 
края 

. (Вскоре мы добавим метод 
center_ship()
в класс 
Ship
.) Наконец, после 
внесения изменений во все игровые элементы, но до перерисовки изменений на 


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

. Вызов 
sleep()
приостанавливает программу на 0,5 секунды. По-
сле завершения паузы управление передается методу 
_update_screen()
, который 
перерисовывает новый флот на экране.
Внутри 
_update_aliens()
вызов 
print()
заменяется вызовом 
_ship_hit()
при 
столкновении пришельца с кораблем:


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




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

    Басты бет