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



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


Глава 14 • Ведение счета
Следующий код может использоваться для создания кнопок в любой игре. Ниже 
приведена первая часть класса 
Button
; сохраните ее в файле 
button .py
:
button.py
import pygame.font
class Button():
 
def __init__(self, ai_settings, screen, msg):
"""Инициализирует атрибуты кнопки."""
self.screen = screen
self.screen_rect = screen.get_rect()
# Назначение размеров и свойств кнопок.
 
self.width, self.height = 200, 50
self.button_color = (0, 255, 0)
self.text_color = (255, 255, 255)
 
self.font = pygame.font.SysFont(None, 48)
# Построение объекта rect кнопки и выравнивание по центру экрана.
 
self.rect = pygame.Rect(0, 0, self.width, self.height)
self.rect.center = self.screen_rect.center
# Сообщение кнопки создается только один раз.
 
self.prep_msg(msg)
Сначала программа импортирует модуль 
pygame .font
, который позволяет Pygame 
выводить текст на экран. Метод 
__init__()
получает параметры 
self
, объекты 
ai_settings
и 
screen
, а также строку 
msg
с текстом кнопки 

. Размеры кнопки 
задаются в точке 

, после чего атрибуты 
button_color
и 
text_color
задаются так, 
чтобы прямоугольник кнопки был окрашен в ярко-зеленый цвет, а текст выводился 
белым цветом.
В точке 

происходит подготовка атрибута 
font
для вывода текста. Аргумент 
None
сообщает Pygame, что для вывода текста должен использоваться шрифт по умолча-
нию, а значение 48 определяет размер текста. Чтобы выровнять кнопку по центру 
экрана, мы создаем объект 
rect
для кнопки 

и задаем его атрибут 
center
в соот-
ветствии с одноименным атрибутом экрана.
Pygame выводит строку текста в виде графического изображения. В точке 

эта 
задача решается методом 
prep_msg()
. Код 
prep_msg()
выглядит так:
button.py
def prep_msg(self, msg):
"""Преобразует msg в прямоугольник и выравнивает текст по центру."""
 
self.msg_image = self.font.render(msg, True, self.text_color,
self.button_color)
 
self.msg_image_rect = self.msg_image.get_rect()
self.msg_image_rect.center = self.rect.center
Метод 
prep_msg()
должен получать параметр 
self
и текст, который нужно вы-
вести в графическом виде (
msg
). Вызов 
font.render()
преобразует текст, храня-
щийся в 
msg
, в изображение, которое затем сохраняется в 
msg_image

. Методу 


Добавление кнопки Play
283
font.render()
также передается логический признак режима сглаживания текста. 
В остальных аргументах передаются цвет шрифта и цвет фона. В нашем примере 
режим сглаживания включен (
True
), а цвет фона совпадает с цветом фона кнопки. 
(Если цвет фона не указан, Pygame пытается вывести шрифт с прозрачным фоном.)
В точке 

изображение текста выравнивается по центру кнопки, для чего создается 
объект 
rect
изображения, а его атрибут 
center
приводится в соответствие с одно-
именным атрибутом кнопки.
Остается создать метод 
draw_button()
, который может вызываться для отображе-
ния кнопки на экране:
button.py
def draw_button(self):
# Отображение пустой кнопки и вывод сообщения.
self.screen.fill(self.button_color, self.rect)
self.screen.blit(self.msg_image, self.msg_image_rect)
Вызов метода 
screen.fill()
рисует прямоугольную часть кнопки. Затем вызов 
screen.blit()
выводит изображение текста на экран с передачей изображения 
и объекта 
rect
, связанного с изображением. Класс 
Button
готов.
Вывод кнопки на экран
В программе класс 
Button
используется для создания кнопки 
Play
. Так как нам 
нужна только одна кнопка 
Play
, мы создадим кнопку прямо в файле 
alien_invasion .py
:
alien_invasion.py
...
from game_stats import GameStats
from button import Button
...
def run_game():
...
pygame.display.set_caption("Alien Invasion")
# Создание кнопки Play.
 
play_button = Button(ai_settings, screen, "Play")
...
# Запуск основного цикла игры.
while True:
...
 
gf.update_screen(ai_settings, screen, stats, ship, aliens,
bullets,
play_button)
run_game()
Программа импортирует класс 
Button
и создает экземпляр 
play_button

, после 
чего передает 
play_button
функции 
update_screen()
, чтобы кнопка появлялась 
при обновлении экрана 

.


284

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




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

    Басты бет