Изменение настроек скорости
Начнем с реорганизации класса Settings и разделения настроек игры на две категории: постоянные и изменяющиеся. Также необходимо проследить за тем, чтобы настройки, изменяющиеся в ходе игры, сбрасывались в исходное состояние в начале новой игры. Метод __init__() из файла settings.py выглядит так:
settings.py
def __init__(self):
. ."""Инициализирует статические настройки игры."""
# Настройки экрана
self.screen_width = 1200
self.screen_height = 800
self.bg_color = (230, 230, 230)
# Настройки корабля
self.ship_limit = 3
. . . .
# Настройки пуль
self.bullet_width = 3
self.bullet_height = 15
self.bullet_color = 60, 60, 60
self.bullets_allowed = 3
# Настройки пришельцев
self.fleet_drop_speed = 10
. . . .
. .# Темп ускорения игры
(1) . .self.speedup_scale = 1.1
(2) . .self.initialize_dynamic_settings()
Значения, которые остаются неизменными, по-прежнему инициализируются в методе __init__(). В точке (1) добавляется настройка speedup_scale, управляющая быстротой нарастания скорости; со значением 2 скорость удваивается каждый раз, когда игрок переходит на следующий уровень, а со значением 1 скорость остается постоянной. С таким значением, как 1,1, скорость будет увеличиваться в достаточной степени, чтобы игра усложнилась, но не стала невозможной. Наконец, вызов initialize_dynamic_settings() инициализирует значения атрибутов, которые должны изменяться в ходе игры (2).
Код initialize_dynamic_settings() выглядит так:
settings.py
def initialize_dynamic_settings(self):
. ."""Инициализирует настройки, изменяющиеся в ходе игры."""
. .self.ship_speed_factor = 1.5
. .self.bullet_speed_factor = 3
. .self.alien_speed_factor = 1
. .# fleet_direction = 1 обозначает движение вправо; а -1 - влево.
. .self.fleet_direction = 1
Метод задает исходные значения скоростей корабля, пуль и пришельцев. Эти скорости будут увеличиваться по ходу игры и будут сбрасываться каждый раз, когда игрок запускает новую игру. Мы включаем в этот метод fleet_direction, чтобы пришельцы в начале новой игры всегда двигались вправо.
Для увеличения скорости корабля, пуль и пришельцев каждый раз, когда игрок достигает нового уровня, в программе используется функция increase_speed():
settings.py
def increase_speed(self):
. ."""Увеличивает настройки скорости."""
. .self.ship_speed_factor *= self.speedup_scale
. .self.bullet_speed_factor *= self.speedup_scale
. .self.alien_speed_factor *= self.speedup_scale
Чтобы увеличить скорость этих игровых элементов, мы умножаем каждую настройку скорости на значение speedup_scale.
Темп игры повышается вызовом increase_speed() в check_bullet_alien_collisions() при уничтожении последнего пришельца во флоте, но перед созданием нового флота:
game_functions.py
def check_bullet_alien_collisions(ai_settings, screen, ship, aliens, bullets):
...
if len(aliens) == 0:
. . . .# Уничтожение пуль, повышение скорости и создание нового флота.
bullets.empty()
. . . .ai_settings.increase_speed()
create_fleet(ai_settings, screen, ship, aliens)
Изменения значений настроек скорости ship_speed_factor, alien_speed_factor и bullet_speed_factor достаточно для того, чтобы ускорить всю игру!