Книга «Изучаем Python»


Глава 12 • Стреляющий корабль Рис. 12.2



Pdf көрінісі
бет147/266
Дата03.03.2023
өлшемі7,86 Mb.
#170986
түріКнига
1   ...   143   144   145   146   147   148   149   150   ...   266
Байланысты:
Изучаем Python. Программирование игр, визуализация данных, веб-приложения ( PDFDrive )

238
Глава 12 • Стреляющий корабль
Рис. 12.2.
Корабль в середине нижней стороны экрана
Рефакторинг: модуль game_functions
В больших проектах перед добавлением нового кода часто проводится рефакто-
ринг уже написанного кода. Рефакторинг упрощает структуру существующего 
кода и дальнейшее развитие проекта. В этом разделе мы создадим новый модуль 
game_functions
для хранения функций, обеспечивающих работу игры. Модуль 
game_functions
предотвратит чрезмерное разрастание 
alien_invasion .py
и сделает 
логику 
alien_invasion .py
более простой и понятной.
Функция check_events()
Начнем с перемещения кода управления событиями в отдельную функцию 
check_
events()
. Тем самым вы упростите 
run_game()
и изолируете цикл управления 
событиями от остального кода. Изоляция цикла событий позволит организовать 
управление событиями отдельно от других аспектов игры (например, обновления 
экрана).
Поместим 
check_events()
в отдельный модуль с именем 
game_functions
:
game_functions.py
import sys
import pygame
def check_events():


Рефакторинг: модуль 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_
sc
reen()
:


240

Достарыңызбен бөлісу:
1   ...   143   144   145   146   147   148   149   150   ...   266




©engime.org 2024
әкімшілігінің қараңыз

    Басты бет