Функция 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():
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 с самого начала. Эта последовательность дает представление о реальном процессе разработки: сначала вы пишете свой код в самом простом виде, а потом подвергаете его рефакторингу по мере роста сложности проекта.
Теперь, когда мы изменили структуру кода и упростили его расширение, можно переходить к динамическим аспектам игры!
Упражнения
12-1. Синее небо: создайте окно Pygame с синим фоном.
12-2. Игровой персонаж: найдите изображение игрового персонажа, который вам нравится, в формате .bmp (или преобразуйте существующее изображение). Создайте класс, который рисует персонажа в центре экрана, и приведите цвет фона изображения в соответствие с цветом фона экрана (или наоборот).