Рефакторинг create_fleet()

We use cookies. Read the Privacy and Cookie Policy

Если бы создание флота на этом было завершено, то функцию create_fleet(), пожалуй, можно было бы оставить в таком виде, но работа еще не закончена, поэтому мы немного подчистим код функции. Ниже приведена версия create_fleet() с двумя новыми функциями: get_number_aliens_x() и create_alien():

game_functions.py

(1) def get_number_aliens_x(ai_settings, alien_width):

. ."""Вычисляет количество пришельцев в ряду."""

available_space_x = ai_settings.screen_width - 2 * alien_width

number_aliens_x = int(available_space_x / (2 * alien_width))

. .return number_aliens_x

def create_alien(ai_settings, screen, aliens, alien_number):

. ."""Создает пришельца и размещает его в ряду."""

alien = Alien(ai_settings, screen)

(2) . .alien_width = alien.rect.width

alien.x = alien_width + 2 * alien_width * alien_number

alien.rect.x = alien.x

aliens.add(alien)

. .

def create_fleet(ai_settings, screen, aliens):

"""Создает флот пришельцев."""

# Создание пришельца и вычисление количества пришельцев в ряду.

alien = Alien(ai_settings, screen)

(3) . .number_aliens_x = get_number_aliens_x(ai_settings, alien.rect.width)

. .

# Создание первого ряда пришельцев.

for alien_number in range(number_aliens_x):

(4) . . . .create_alien(ai_settings, screen, aliens, alien_number)

Код get_number_aliens_x() нисколько не изменился по сравнению с create_fleet() (1) . Код create_alien() почти не изменился, разве что для определения ширины используется только что созданный пришелец (2). В точке (3) код вычисления горизонтальных интервалов заменяется вызовом get_number_aliens_x(), а строка с alien_width удалена, потому что теперь задача решается в create_alien(). В точке (4) вызывается функция create_alien(). Рефакторинг упрощает добавление новых строк и создание всего флота.