266
Глава 13 • Осторожно, пришельцы!
Рис. 13.4.
На экране появился весь флот пришельцев
alien_invasion.py
# Создание флота пришельцев.
gf.create_fleet(ai_settings, screen, ship, aliens)
Если теперь запустить игру, вы увидите целый флот пришельцев (рис. 13.4).
В следующем разделе мы приведем флот в движение.
УПРАЖНЕНИЯ
13-1 . Звезды: найдите изображение звезды . Создайте на экране сетку из звезд .
13-2 . Звезды-2: чтобы звезды выглядели более реалистично, следует внести случайное
отклонение при размещении звезд . Вспомните, что случайные числа генерируются следу-
ющим образом:
from random import randint
random_number = randint(-10,10)
Этот код возвращает случайное целое число в диапазоне от −10 до 10 . Используя свой код
из упражнения 13-1, измените позицию каждой звезды на случайную величину .
Перемещение флота
Флот пришельцев должен двигаться вправо по экрану, пока не дойдет до края;
тогда флот опускается на заданную величину и начинает двигаться в обратном
Перемещение флота
267
направлении. Это продолжается до тех пор, пока все пришельцы не будут сбиты,
один из них не столкнется с кораблем или не достигнет низа экрана. Начнем с пере-
мещения флота вправо.
Перемещение вправо
Чтобы корабли пришельцев перемещались по экрану, мы воспользуемся методом
update()
из
alien .py
, который будет вызываться для каждого пришельца в группе.
Сначала добавим настройку для управления скоростью каждого пришельца:
settings.py
def __init__(self):
...
# Настройки пришельцев
self.alien_speed_factor = 1
Настройка используется в реализации
update()
:
alien.py
def update(self):
"""Перемещает пришельца вправо."""
self.x += self.ai_settings.alien_speed_factor
self.rect.x = self.x
При каждом обновлении позиции пришельца мы смещаем его вправо на величину,
хранящуюся в
alien_speed_factor
. Точная позиция пришельца хранится в атрибу-
те
self.x
, который может принимать вещественные значения
. Затем значение
self.x
используется для обновления позиции прямоугольника пришельца
.
В основном цикле
while
уже содержатся вызовы обновления корабля и пуль. Те-
перь необходимо также обновить позицию каждого пришельца:
alien_invasion.py
# Запуск основного цикла игры.
while True:
gf.check_events(ai_settings, screen, ship, bullets)
ship.update()
gf.update_bullets(bullets)
gf.update_aliens(aliens)
gf.update_screen(ai_settings, screen, ship, aliens, bullets)
Позиции пришельцев обновляются после обновления пуль, потому что скоро мы
будем проверять, попали ли какие-либо пули в пришельцев.
Наконец, добавьте новую функцию
update_aliens()
в конец файла
game_functions .py
:
game_functions.py
def update_aliens(aliens):
"""Обновляет позиции всех пришельцев во флоте."""
aliens.update()
268
Достарыңызбен бөлісу: |