будет вызываться в начале каждой новой игры.
Завершение игры
277
# Создание экземпляра для хранения игровой статистики.
stats = GameStats(ai_settings)
...
# Запуск основного цикла игры.
while True:
...
gf.update_bullets(ai_settings, screen, ship, aliens, bullets)
gf.update_aliens(ai_settings, stats, screen, ship, aliens,
bullets)
...
Мы импортируем новый класс
GameStats
, создаем экземпляр
stats
, а затем
добавляем аргументы
stats
,
screen
и
ship
в вызов
update_aliens()
. Эти аргу-
менты будут использоваться для отслеживания количества кораблей, оставшихся
у игрока, и построения нового флота при столкновении пришельца с кораблем.
Когда пришелец сталкивается с кораблем, программа уменьшает количество
оставшихся кораблей на 1, уничтожает всех существующих пришельцев и пули,
создает новый флот и возвращает корабль в середину экрана. (Также игра нена-
долго приостанавливается, чтобы игрок заметил столкновение и перестроился
перед появлением нового флота.)
Бульшая часть этого кода будет включена в функцию
ship_hit()
:
game_functions.py
import sys
from time import sleep
import pygame
...
def ship_hit(ai_settings, stats, screen, ship, aliens, bullets):
"""Обрабатывает столкновение корабля с пришельцем."""
# Уменьшение ships_left.
stats.ships_left -= 1
# Очистка списков пришельцев и пуль.
aliens.empty()
bullets.empty()
# Создание нового флота и размещение корабля в центре.
create_fleet(ai_settings, screen, ship, aliens)
ship.center_ship()
# Пауза.
sleep(0.5)
def update_aliens(ai_settings, stats, screen, ship, aliens,
bullets):
...
# Проверка коллизий "пришелец-корабль".
if pygame.sprite.spritecollideany(ship, aliens):
ship_hit(ai_settings, stats, screen, ship, aliens, bullets)
Сначала мы импортируем функцию
sleep()
из модуля
time
, чтобы приостановить
игру . Новая функция
ship_hit()
управляет реакцией игры на столкновение
278 Глава 13 • Осторожно, пришельцы!
корабля с пришельцем. Внутри
ship_hit()
число оставшихся кораблей уменьша-
ется на 1 , после чего происходит очистка групп
aliens
и
bullets
.
Затем программа создает новый флот и выравнивает корабль по центру нижнего
края . (Вскоре мы добавим метод
center_ship()
в класс
Ship
.) Наконец, после
внесения изменений во все игровые элементы, но до перерисовки изменений
на экране делается короткая пауза, чтобы игрок увидел, что его корабль столкнул-
ся с пришельцем . После завершения паузы
sleep()
код переходит к функции
update_screen()
, которая перерисовывает новый флот на экране.
Также необходимо обновить определение
update_aliens()
и добавить параметры
stats
,
screen
и
bullets
, чтобы эти значения можно было передать при вызове
ship_hit()
.
Ниже приведен новый метод
center_ship()
; добавьте его в конец
ship .py
:
ship.py
def center_ship(self):
"""Размещает корабль в центре нижней стороны."""
self.center = self.screen_rect.centerx
Чтобы выровнять корабль по центру, мы задаем атрибуту
center
корабля значение,
соответствующее центру экрана (полученное при помощи атрибута
screen_rect
).
Достарыңызбен бөлісу: