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



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


Глава 14 • Ведение счета
Затем следует внести изменения в 
update_screen()
, чтобы кнопка 
Play
появлялась 
только в неактивном состоянии игры:
game_functions.py
def update_screen(ai_settings, screen, stats, ship, aliens, bullets,
play_button):
"""Обновляет изображения на экране и отображает новый экран."""
...
# Кнопка Play отображается в том случае, если игра неактивна.
if not stats.game_active:
play_button.draw_button()
# Отображение последнего прорисованного экрана.
pygame.display.flip()
Чтобы кнопка 
Play
не закрывалась другими элементами экрана, мы отображаем 
ее после всех остальных игровых элементов, но перед переключением на новый 
экран. Теперь при запуске Alien Invasion в центре экрана отображается кнопка 
Play
(рис. 14.1).
Рис. 14.1.
Кнопка Play выводится тогда, когда игра неактивна
Запуск игры
Чтобы при нажатии кнопки 
Play
запускалась новая игра, добавьте в файл 
game_
functions .py
следующий код для отслеживания событий мыши над кнопкой:
game_functions.py
def check_events(ai_settings, screen, stats, play_button, ship, bullets):
"""Обрабатывает нажатия клавиш и события мыши."""


Добавление кнопки Play
285
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(stats, play_button, mouse_x, mouse_y)
def check_play_button(stats, play_button, mouse_x, mouse_y):
"""Запускает новую игру при нажатии кнопки Play."""
 
if play_button.rect.collidepoint(mouse_x, mouse_y):
stats.game_active = True
Обновленное определение 
check_events()
получает параметры 
stats
и 
play_button

Параметр 
stats
будет использоваться для обращения к флагу 
game_active
, а 
play_
button
— для проверки того, была ли нажата кнопка 
Play
.
Pygame обнаруживает событие 
MOUSEBUTTONDOWN
, когда игрок щелкает в любой точке 
экрана 

, но мы хотим ограничить игру, чтобы она реагировала только на щелчки 
на кнопке 
Play
. Для этого будет использоваться метод 
pygame.mouse.get_pos()

возвращающий кортеж с координатами 
x
и 
y
точки щелчка 

. Эти значения пере-
даются функции 
check_play_button()

, которая использует метод 
collidepoint()
для проверки того, находится ли точка щелчка в пределах области, определяемой 
прямоугольником кнопки 
Play

. Если точка находится в пределах кнопки, флаг 
game_active
переводится в состояние 
True
, и игра начинается!
При вызове 
check_events()
в 
alien_invasion .py
должны передаваться два дополни-
тельных аргумента, 
stats
и 
play_button
:
alien_invasion.py
# Запуск основного цикла игры.
while True:
gf.check_events(ai_settings, screen, stats, play_button, ship,
bullets)
...
К этому моменту вы сможете запустить и сыграть полноценную игру. После за-
вершения игры значение 
game_active
становится равным 
False
, а кнопка 
Play
снова 
появится на экране.
Сброс игры
Только что написанный нами код работает при первом нажатии кнопки 
Play

но не работает после завершения первой игры, потому что условия, приводящие 
к окончанию игры, еще не были сброшены.
Чтобы игра сбрасывалась при каждом нажатии кнопки 
Play
, необходимо сбросить 
игровую статистику, стереть старых пришельцев и пули, построить новый флот 
и вернуть корабль в центр нижней стороны:
game_functions.py
def check_play_button(ai_settings, screen, stats, play_button, ship, aliens,
bullets, mouse_x, mouse_y):


286

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




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

    Басты бет