Основы PyGame¶
Pygame — библиотека, предназначенная для разработки мультимедийных приложений с графическим интерфейсом, например игр.
Документация, обучающие материалы и дополнительная информация доступна разработчикам на сайте проекта: https://www.pygame.org/docs/
Начало работы¶
Начнем знакомство с библиотекой непосредственно с разбора примера простого приложения:
import pygame
import sys
pygame.init()
screen = pygame.display.set_mode((1200, 800))
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
В первую очередь импортируем модуль pygame в наш файл с исходным кодом:
import pygame
Затем вызываем функцию init() для подготовки модулей pygame к работе:
pygame.init()
После этого создаем графическое окно, передав в качестве аргумента в функцию set_mode()
его разрешение в виде пары целых чисел. В свою очередь функция вернет нам объект типа
Surface, используемый для представления изображений:
screen = pygame.display.set_mode((1200, 800))
Далее, запускаем основной цикл программы, в котором, среди всех событий, происходящих в нашем приложении, перехватываем событие закрытия основного графического окна пользователем:
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
После того как ожидаемое событие наступило, завершаем работу с библиотекой pygame вызовом
функции pygame.quit() и нашей программы вызовом функции exit() из модуля sys.
Рисование геометрических фигур¶
Разместим в окне нашего приложения прямоугольник. Прямоугольные объекты
представлены типом Rect:
Rect(left, top, width, height)
Rect((left, top), (width, height))
Для создания объекта этого типа нам необходимо указать координаты левого верхнего угла прямоугольника и длины его сторон:
r = Rect(0, 0, 100, 200)
Обратите внимание, что начало координат (0, 0) находится в левом верхнем углу окна.
В библиотеке pygame функции отображения геометрических фигур находятся
в модуле draw. Нарисуем прямоугольник c помощью функции rect():
rect(Surface, color, Rect, width=0) -> Rect
Для этого передадим в функцию в качестве аргументов поверхность, на которой мы размещаем прямоугольник, его цвет, сам прямоугольник и толщину линии — стороны прямоугольника. Если толщина равна нулю прямоугольник закрашивается сплошным цветом.
Рассмотрим готовый пример:
import pygame
import sys
pygame.init()
screen = pygame.display.set_mode((1000, 800))
r = pygame.Rect(50, 50, 100, 200)
pygame.draw.rect(screen, (255, 0, 0), r, 0)
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
pygame.display.flip()
Обратите внимание на последнюю строку нашей программы. На самом деле графические
объекты которые мы хотим разместить на основном экране сначала попадают в специальный буфер.
Чтобы отобразить изменения стали видны вызываем функцию flip().
Прочие функции для рисования графических фигур¶
-
pygame.draw.line(Surface, color, start_pos, end_pos, width=1)¶ Нарисовать линию на поверхности
Surface, цветомcolor, с началом в точкеstart_pos, концом в точке end_pos и толщиной линии width.
-
pygame.draw.lines(Surface, color, closed, pointlist, width=1)¶ Нарисовать линию, соединяющую точки из последовательности
pointlistна поверхностиSurface, цветомcolor, с толщиной линииwidth. Каждая точка представлена парой координат. Если параметрclosedравенTrue, конечная точка соединяется с начальной.
-
pygame.draw.circle(Surface, color, pos, radius, width=0)¶ Нарисовать окружность на поверхности Surface, цветом
color, с центром в точкеposи радиусомradius. Если толщина линииwidthравна нулю, окружность закрашивается.
-
pygame.draw.ellipse(Surface, color, Rect, width=0)¶ Нарисовать эллипс, ограниченный прямоугольником
Rect, на поверхностиSurface, цветомcolor. Если толщина линииwidthравна нулю, эллипс закрашивается.
-
pygame.draw.polygon(Surface, color, pointlist, width=0)¶ Нарисовать многоугольник по точкам из последовательности
pointlistна поверхностиSurface, цветомcolor, с толщиной линииwidth. Каждая точка представлена парой координат. Если толщина линииwidthравна нулю многоугольник закрашивается.
Цвет¶
Цвета в библиотеке pygame представлены в соответствии с моделью RGB: https://ru.wikipedia.org/wiki/RGB
Значение для цвета можно задать тройкой чисел, каждое из которых лежит в диапазоне от 0 до 255. Первое значение в последовательности определяет, какое количество красного содержится в данном оттенке, второе - зеленого, третье - голубого. Чем меньше значение числа, тем темнее будет оттенок. Например, красный цвет можно представить как (255, 0, 0), белый как (255, 255, 255), а черный как (0, 0, 0).
Помимо этого, в модуле color из библиотеки pygame содержится словарь THECOLORS,
ключами которого являются названия различных цветовых оттенков. Подключить его можно с помощью команды:
from pygame.color import THECOLORS
Закрасим основной экран c помощью метода fill():
screen = pygame.display.set_mode((1200, 800))
screen.fill(THECOLORS['orange'])
Текст и шрифты¶
При работе с текстом мы будем использовать шрифты - группы символов объединенных
по стилистическому или иному признаку. Шрифты в библиотеке pygame представлены типом Font
Чтобы создать объект Font на основе имеющегося в системе шрифта вызовем следующую функцию:
SysFont(name, size, bold=False, italic=False)
С помощью параметра name передаем в функцию имя шрифта, параметр
size - размер шрифта в пунктах. Параметры bold и italic отвечают за начертание шрифта.
Список имеющихся в системе шрифтов можно получить с помощью функции get_fonts():
pygame.font.get_fonts() -> list of strings
Далее, с помощью метода render() нашего объекта типа Font получаем изображение
с текстом, которое передаем на вход методу blit() для отрисовке на нашем основном экране:
screen = pygame.display.set_mode(size)
screen.fill(THECOLORS['white'])
font = pygame.font.SysFont('couriernew', 40)
text = font.render(str('HELLO'), True, THECOLORS['green'])
screen.blit(text, (50, 50))
Текст размещается в на основном экране по координатам (50, 50)
Задания¶
1. Используя функции для работы с графикой библиотеки pygame, нарисуйте дом с квадратным основанием и треугольной крышей.
2. Используя функции для работы с графикой библиотеки pygame, нарисуйте белый флаг с олимпийскими кольцами.
3. Разработайте программу, которая разбивает основное игровое окно на клетки заданного размера.
4. Доработайте программу так, чтобы в каждой клетке был записан её порядковый номер.
5. Доработайте в программу возможность закрашивания клетки с произвольным номером случайным цветом. Номера клеток которые необходимо закрасить считывать из файла.