Pygame
В последних двух частях материала этого курса мы познакомимся с библиотекой pygame. Это библиотека Python для программирования игр. Она помогает создавать графические элементы, обрабатывать события клавиатуры и мыши, а также реализовывать другие возможности, необходимые в играх.
Установка pygame
Linux
Откройте командную строку, введите pip3 install pygame и нажмите enter.
Это должно установить библиотеку pygame на ваш компьютер.
Windows
Откройте терминал Windows: откройте меню, введите cmd и нажмите enter:
Должно открыться окно интерпретатора командной строки. Введите pip3 install pygame и нажмите enter.
Это должно установить библиотеку pygame на ваш компьютер.
Для установки могут потребоваться права администратора системы. Если описанное выше не сработает, можно попробовать запустить приложение терминала от имени администратора: откройте меню Windows, найдите приложение CMD, щелкните по нему правой кнопкой мыши и выберите "Run as administrator".
Установка и использование pygame требует, чтобы ваша установка Python была добавлена в path, как описано здесь.
Mac
Откройте Terminal, например через значок лупы в правом верхнем углу:
Должен открыться инструмент поиска. Введите terminal и нажмите enter:
Введите следующее и нажмите enter:
pip3 install pygame
Это должно установить библиотеку pygame на ваш компьютер.
Ваша первая программа
Вот простая программа для проверки, что установка pygame работает корректно:
import pygame
pygame.init()
window = pygame.display.set_mode((640, 480))
window.fill((0,0,0))
pygame.display.flip()
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
exit()Когда эта программа запускается, она должна показать окно:

Программа только отображает окно и работает до тех пор, пока пользователь не закроет это окно.
Посмотрим подробнее на шаги, необходимые для этого. Первая строка подключает библиотеку pygame: import pygame. Следующая команда pygame.init инициализирует модули pygame, а следующая создает окно с помощью функции pygame.display.set_mode.
pygame.init()
window = pygame.display.set_mode((640, 480))Функция set_mode принимает размеры окна в качестве аргумента. Кортеж (640, 480) означает, что ширина окна равна 640 пикселям, а высота — 480 пикселям. Имя переменной window позже можно использовать для доступа к окну, например чтобы что-то в нем нарисовать.
Следующие две команды именно это и делают:
window.fill((0, 0, 0))
pygame.display.flip()Метод fill заполняет окно цветом, переданным в качестве аргумента. В этом случае цвет черный, переданный как RGB-значение в кортеже (0, 0, 0). pygame.display.flip обновляет содержимое окна.
После этих команд инициализации начинается главный цикл программы:
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
exit()Главный цикл обрабатывает все события, которые операционная система передает программе. На каждой итерации функция pygame.event.get возвращает список событий, собранных с предыдущей итерации.
В примере выше программа обрабатывает только события типа pygame.QUIT. Это событие возникает, например, при нажатии кнопки закрытия в углу окна. Если возникает событие pygame.QUIT, программа завершается через функцию exit.
Можно попробовать посмотреть, что произойдет, если программа не будет обрабатывать событие pygame.QUIT. Это должно означать, что нажатие кнопки закрытия ничего не делает, что сбило бы пользователя с толку. Поскольку программа запускается из командной строки, ее все еще можно остановить из командной строки с помощью Control+C.
Добавление изображения
Добавим изображение в окно:
import pygame
pygame.init()
window = pygame.display.set_mode((640, 480))
robot = pygame.image.load("robot.png")
window.fill((0, 0, 0))
window.blit(robot, (100, 50))
pygame.display.flip()
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
exit()Программа использует это изображение робота, которое хранится в файле robot.png:
Файл robot.png должен находиться в той же директории, что и исходный код вашей программы, иначе программа не сможет его найти. В шаблонах упражнений для этой части изображения уже находятся в директории упражнения.
Теперь окно должно выглядеть так:

Функция pygame.image.load загружает изображение из файла robot.png и сохраняет ссылку на него в переменной с именем robot. Метод blit рисует изображение в точке (100, 50), а функция pygame.display.flip обновляет содержимое окна, как и раньше. Точка (100, 50) означает, что верхний левый угол изображения находится в этой позиции внутри окна.
В pygame начало к оординат (0, 0) находится в верхнем левом углу окна. Координаты x увеличиваются вправо, а координаты y увеличиваются вниз, так что правый нижний угол имеет координаты (640, 480). Это противоположно тому, как координаты обычно рассматриваются, например, в математике, но довольно распространено в программировании, и к этому стоит привыкнуть.
После загрузки изображения его можно использовать много раз в том же окне. Следующий код рисует изображение робота в трех разных местах:
window.blit(robot, (0, 0))
window.blit(robot, (300, 0))
window.blit(robot, (100, 200))В результате окно должно выглядеть так:

Здесь мы задаем положение изображения так, чтобы оно оказалось в центре окна:
width = robot.get_width()
height = robot.get_height()
window.blit(robot, (320-width/2, 240-height/2))Теперь окно должно выглядеть так:

Метод get_width возвращает ширину изображения, а метод get_height возвращает его высоту, оба значения в пикселях. Центр окна находится на половине его ширины и высоты, то есть в (320, 240), и это можно использовать для вычисления подходящего положения верхнего левого угла изображения, чтобы оно находилось точно в центре.
Текущие баллы можно посмотреть в синем индикаторе в правом нижнем углу страницы.