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



Pdf көрінісі
бет150/238
Дата07.01.2022
өлшемі7,86 Mb.
#18670
түріКнига
1   ...   146   147   148   149   150   151   152   153   ...   238
game_functions.py

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

        bullets):

"""Обрабатывает нажатия клавиш и события мыши."""

for event in pygame.event.get():

if event.type == pygame.QUIT:

...


elif event.type == pygame.MOUSEBUTTONDOWN:

mouse_x, mouse_y = pygame.mouse.get_pos()

            check_play_button(ai_settings, screen, stats, play_ 



                                button, ship,

                aliens, bullets, mouse_x, mouse_y)

Определению 

check_events()

 необходим параметр 

aliens


, который будет пере-

даваться 

check_play_button()

. Также обновляется вызов 

check_play_button()

 

с включением соответствующих аргументов .



Теперь обновите вызов 

check_events()

 в 

alien_invasion .py



, чтобы в нем передавался 

аргумент 

aliens

:

alien_invasion.py



# Запуск основного цикла игры.

while True:

    gf.check_events(ai_settings, screen, stats, play_button, ship,

        aliens, bullets)

...



Добавление кнопки Play    287

После этих изменений игра будет правильно переходить в исходное состояние при 

каждом нажатии 

Play


, и вы сможете сыграть столько раз, сколько вам захочется!

Блокировка кнопки Play

У кнопки 

Play


 в нашем приложении есть одна проблема: область кнопки на экране 

продолжает реагировать на щелчки, даже если кнопка 

Play

 не отображается. Если 



случайно щелкнуть на месте кнопки 

Play


 после начала игры, то игра перезапустится!

Чтобы исправить этот недостаток, следует запускать игру только в том случае, если 

флаг 

game_active



 находится в состоянии 

False


:

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:

# Сброс игровой статистики.

...


Флаг 

button_clicked

 содержит значение 

True


 или 

False


 ; а игра перезапуска-

ется только в том случае, если пользователь нажал кнопку 

Play

, а игра не активна 



в данный момент . Чтобы протестировать это поведение, запустите новую игру 

и многократно щелкайте в том месте, где должна находиться кнопка 

Play

. Если все 



работает так, как положено, нажатия кнопки 

Play


 не должны влиять на ход игры.

Сокрытие указателя мыши

Указатель мыши должен быть видимым, чтобы пользователь мог начать игру, но 

после начала игры он только мешает. Чтобы исправить этот недостаток, мы скроем 

указатель мыши после того, как игра станет активной:

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:

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

        pygame.mouse.set_visible(False)

...

Вызов 


set_visible()

 со значением 

False

 приказывает Pygame скрыть указатель, 



когда он находится над окном игры.

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

жать кнопку 

Play


 для запуска новой игры. Эту задачу решает следующий код:

game_functions.py

def ship_hit(ai_settings, screen, stats, ship, aliens, bullets):




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

"""Обрабатывает столкновение корабля с пришельцем."""

if stats.ships_left > 0:

...


else:

stats.game_active = False

        pygame.mouse.set_visible(True)

Указатель снова становится видимым сразу же после того, как игра становится 

неактивной, что происходит в 

ship_hit()

. Внимание к подобным деталям сделает 

вашу игру более профессиональной, а игрок сможет сосредоточиться на игре вместо 

того, чтобы разбираться в сложностях пользовательского интерфейса.



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




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

    Басты бет