более простой и понятной.
Рефакторинг: модуль game_functions
239
"""Обрабатывает нажатия клавиш и события мыши."""
for event in pygame.event.get():
if event.type == pygame.QUIT:
sys.exit()
Этот модуль импортирует модули
sys
и
pygame
, используемые в цикле обработки
событий. На данный момент эта функция не получает параметров, а ее тело копи-
руется из цикла событий в
alien_invasion .py
.
Теперь изменим код
alien_invasion .py
, чтобы он импортировал модуль
game_
functions
, и мы заменим цикл событий вызовом
check_events()
:
alien_invasion.py
import pygame
from settings import Settings
from ship import Ship
import game_functions as gf
def run_game():
...
# Запуск основного цикла игры.
while True:
gf.check_events()
# При каждом проходе цикла перерисовывается экран.
...
Импортировать модуль
sys
прямо в главный файл в программы уже не нужно, по-
тому что он сейчас используется только в модуле
game_functions
. Импортируемому
модулю
game_functions
для удобства присваивается псевдоним
gf
.
Функция update_screen()
Для дальнейшего упрощения
run_game()
выделим код обновления экрана в от-
дельную функцию
update_screen()
в
game_functions .py
:
game_functions.py
...
def check_events():
...
def update_screen(ai_settings, screen, ship):
"""Обновляет изображения на экране и отображает новый экран."""
# При каждом проходе цикла перерисовывается экран.
screen.fill(ai_settings.bg_color)
ship.blitme()
# Отображение последнего прорисованного экрана.
pygame.display.flip()
Новая функция
update_screen()
получает три параметра:
ai_settings
,
screen
и
ship
. Теперь необходимо заменить цикл
while
из
alien_invasion .py
вызовом
update_
screen()
:
240 Глава 12 • Стреляющий корабль
alien_invasion.py
...
# Запуск основного цикла игры.
while True:
gf.check_events()
gf.update_screen(ai_settings, screen, ship)
run_game()
Эти две функции упрощают цикл
while
и процесс дальнейшей разработки. Буль-
шая часть работы
будет выполняться не в
run_game()
, а в модуле
game_functions
.
Так как мы решили начать работу с кодом c одного файла, мы не стали вводить мо-
дуль
game_functions
с самого начала. Эта последовательность дает представление
о реальном процессе разработки: сначала вы пишете свой код в самом простом виде,
а потом подвергаете его рефакторингу по мере роста сложности проекта.
Теперь, когда мы изменили структуру кода и упростили его расширение, можно
переходить к динамическим аспектам игры!
Достарыңызбен бөлісу: