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



Pdf көрінісі
бет151/238
Дата07.01.2022
өлшемі7,86 Mb.
#18670
түріКнига
1   ...   147   148   149   150   151   152   153   154   ...   238
УПРАЖНЕНИЯ

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

Чтобы увеличить скорость этих игровых элементов, мы умножаем каждую на-

стройку скорости на значение 

speedup_scale

.



290    Глава 14  •  Ведение счета

Темп игры повышается вызовом 

increase_speed()

 в 


check_bullet_alien_

collisions()

 при уничтожении последнего пришельца во флоте, но перед созда-

нием нового флота:



game_functions.py

def check_bullet_alien_collisions(ai_settings, screen, ship, aliens, bullets):

...

if len(aliens) == 0:



        # Уничтожение пуль, повышение скорости и создание нового флота.

bullets.empty()

        ai_settings.increase_speed()

create_fleet(ai_settings, screen, ship, aliens)

Изменения значений настроек скорости 

ship_speed_factor

alien_speed_factor



 

и 

bullet_speed_factor



 достаточно для того, чтобы ускорить всю игру!

Сброс скорости

Каждый раз, когда игрок начинает новую игру, все измененные настройки должны 

вернуться к исходным значениям, иначе каждая новая игра будет начинаться с по-

вышенными настройками скорости предыдущей игры:

game_functions.py

def check_play_button(ai_settings, screen, stats, play_button, ship, aliens,

bullets, mouse_x, mouse_y):

"""Запускает новую игру при нажатии кнопки Play."""

button_clicked = play_button.rect.collidepoint(mouse_x, mouse_y)

if button_clicked and not stats.game_active:

        # Сброс игровых настроек.

        ai_settings.initialize_dynamic_settings()

# Указатель мыши скрывается.

pygame.mouse.set_visible(False)

...

Игра Alien Invasion стала достаточно сложной и интересной. Каждый раз, когда 



игрок очищает экран, игра должна слегка ускориться, а ее сложность должна слегка 

возрасти. Если сложность игры возрастает слишком быстро, уменьшите значение 

settings.speedup_scale

, а если наоборот, сложность недостаточна, — слегка уве-

личьте это значение. Найдите оптимальное значение, оценивая сложность игры 

за разумный промежуток времени. Первая пара флотов должна быть простой, не-

сколько следующих — сложными, но возможными, а при последующих попытках 

сложность должна становиться практически безнадежной.





Достарыңызбен бөлісу:
1   ...   147   148   149   150   151   152   153   154   ...   238




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

    Басты бет