с включением соответствующих аргументов .
Добавление кнопки 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()
. Внимание к подобным деталям сделает
вашу игру более профессиональной, а игрок сможет сосредоточиться на игре вместо
того, чтобы разбираться в сложностях пользовательского интерфейса.
Достарыңызбен бөлісу: