Изменение настроек скорости

We use cookies. Read the Privacy and Cookie Policy

Начнем с реорганизации класса 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 достаточно для того, чтобы ускорить всю игру!