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



Pdf көрінісі
бет174/266
Дата03.03.2023
өлшемі7,86 Mb.
#170986
түріКнига
1   ...   170   171   172   173   174   175   176   177   ...   266
Байланысты:
Изучаем Python. Программирование игр, визуализация данных, веб-приложения ( PDFDrive )


Глава 14 • Ведение счета
"""Обрабатывает столкновение корабля с пришельцем."""
if stats.ships_left > 0:
...
else:
stats.game_active = False
pygame.mouse.set_visible(True)
Указатель снова становится видимым сразу же после того, как игра становится 
неактивной, что происходит в 
ship_hit()
. Внимание к подобным деталям сделает 
вашу игру более профессиональной, а игрок сможет сосредоточиться на игре вместо 
того, чтобы разбираться в сложностях пользовательского интерфейса.
УПРАЖНЕНИЯ
14-1 . Запуск игры клавишей P: так как в Alien Invasion игрок управляет кораблем с клави-
атуры, для запуска игры также лучше использовать клавиатуру . Добавьте код, с которым 
игрок сможет запустить игру нажатием клавиши P . Возможно, часть кода из check_play_
button() стоит переместить в функцию start_game(), которая будет вызываться из check_
play_button() и check_keydown_events() .
14-2 . Учебная стрельба: создайте у правого края экрана прямоугольник, который двига-
ется вверх и вниз с постоянной скоростью . У левого края располагается корабль, кото-
рый перемещается вверх и вниз игроком и стреляет по движущейся прямоугольной ми-
шени . Добавьте кнопку Play для запуска игры . После трех промахов игра заканчивается, 
а на экране снова появляется кнопка Play . Нажатие этой кнопки перезапускает игру .
Повышение сложности
В текущей версии после того, как весь флот пришельцев будет уничтожен, игрок 
переходит на новый уровень, но сложность игры остается неизменной. Давайте 
немного оживим игру и повысим ее сложность; для этого скорость игры будет по-
вышаться каждый раз, когда игрок уничтожает весь флот.
Изменение настроек скорости
Начнем с реорганизации класса 
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
# Настройки пуль


Повышение сложности
289
self.bullet_width = 3
self.bullet_height = 15
self.bullet_color = 60, 60, 60
self.bullets_allowed = 3
# Настройки пришельцев
self.fleet_drop_speed = 10
# Темп ускорения игры
 
self.speedup_scale = 1.1
 
self.initialize_dynamic_settings()
Значения, которые остаются неизменными, по-прежнему инициализируются в ме-
тоде 
__init__()
. В точке 

добавляется настройка 
speedup_scale
, управляющая 
быстротой нарастания скорости; со значением 2 скорость удваивается каждый раз, 
когда игрок переходит на следующий уровень, а со значением 1 скорость остается 
постоянной. С таким значением, как 1,1, скорость будет увеличиваться в достаточ-
ной степени, чтобы игра усложнилась, но не стала невозможной. Наконец, вызов 
initialize_dynamic_settings()
инициализирует значения атрибутов, которые 
должны изменяться в ходе игры 

.
Код 
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
Чтобы увеличить скорость этих игровых элементов, мы умножаем каждую на-
стройку скорости на значение 
s
peedup_scale
.


290

Достарыңызбен бөлісу:
1   ...   170   171   172   173   174   175   176   177   ...   266




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

    Басты бет