Графическое программирование в Python открывает новые возможности для обучения: ученик видит результат сразу на экране. Библиотека Pygame позволяет создавать интерактивные приложения, игры и обучающие проекты.
В этой статье мы разберём:
- как работает курсор мыши в Pygame
- как используется функция pygame.draw.rect()
- как объединить всё это в полноценную программу
В качестве примера создадим интерактивное окно, где прямоугольник реагирует на наведение курсора и клики мыши.
📘 Теория
1. Курсор в Pygame
В Pygame курсор — это часть системы событий.
Мы можем:
- получить позицию мыши → pygame.mouse.get_pos()
- проверить нажатие кнопки → pygame.mouse.get_pressed()
- обработать событие клика → pygame.MOUSEBUTTONDOWN
Позиция мыши возвращается в виде координат: (x, y)
2. Рисование прямоугольника — pygame.draw.rect()
Синтаксис:
pygame.draw.rect(surface, color, rect, width=0)
Где:
- surface — поверхность (обычно screen)
- color — цвет в формате (R, G, B)
- rect — координаты и размеры (x, y, width, height)
- width=0 — если 0, прямоугольник закрашенный
Пример:
pygame.draw.rect(screen, (0, 200, 0), (100, 100, 200, 100))
🧪 Программа
🎯 Задача программы
- Нарисовать прямоугольник.
- Если курсор находится внутри него — цвет меняется.
- Если нажать мышкой — появляется сообщение.
- Отображается позиция курсора.
📜 Код программы
import pygame
import sys
pygame.init()
# Размер окна
WIDTH, HEIGHT = 600, 400
screen = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("Работа с курсором и draw.rect")
font = pygame.font.SysFont("arial", 24)
# Прямоугольник
rect = pygame.Rect(200, 150, 200, 100)
running = True
clicked = False
clock = pygame.time.Clock()
while running:
clock.tick(60)
screen.fill((240, 240, 240))
mouse_pos = pygame.mouse.get_pos()
mouse_click = pygame.mouse.get_pressed()
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
# Проверка наведения курсора
if rect.collidepoint(mouse_pos):
color = (0, 200, 0)
if mouse_click[0]: # левая кнопка мыши
clicked = True
else:
color = (200, 0, 0)
# Рисуем прямоугольник
pygame.draw.rect(screen, color, rect)
# Текст координат курсора
coord_text = font.render(f"Курсор: {mouse_pos}", True, (0, 0, 0))
screen.blit(coord_text, (20, 20))
# Сообщение при клике
if clicked:
click_text = font.render("Прямоугольник нажат!", True, (0, 0, 0))
screen.blit(click_text, (180, 300))
pygame.display.flip()
pygame.quit()
sys.exit()
📘 Описание программы с pygame.draw.rect() и курсором
(интерактивный прямоугольник с котом Пуфиком)
Ниже — разбор программы, в которой:
- рисуется прямоугольник с помощью pygame.draw.rect(),
- отслеживается положение курсора,
- проверяется наведение мыши,
- обрабатывается клик,
- отображается текстовая реакция.
Это базовый, но очень важный пример для понимания работы графики в Pygame.
1️⃣ Структура программы
Любая программа на Pygame строится по единому принципу:
- Инициализация
- Создание окна
- Основной игровой цикл
- Обработка событий
- Отрисовка объектов
- Обновление экрана
2️⃣ Инициализация
pygame.init()
Эта команда запускает все внутренние модули Pygame:
- графику
- шрифты
- обработку событий
- таймер
Без неё программа работать не будет.
3️⃣ Создание окна
screen = pygame.display.set_mode((600, 400))
pygame.display.set_caption("Работа с курсором")
- (600, 400) — ширина и высота окна.
- set_caption() — заголовок окна.
screen — это поверхность, на которой мы будем рисовать.
4️⃣ Создание прямоугольника
rect = pygame.Rect(200, 150, 200, 100)
Это объект класса Rect.
Параметры:
(x, y, width, height)
- 200 — отступ слева
- 150 — отступ сверху
- 200 — ширина
- 100 — высота
Объект Rect удобен тем, что:
- хранит координаты
- умеет проверять столкновения
- поддерживает методы проверки попадания
5️⃣ Основной цикл программы
while running:
Это «сердце» программы.
Он выполняется 60 раз в секунду (если задан clock.tick(60)).
Внутри цикла:
- проверяются события
- определяется положение мыши
- рисуются объекты
- обновляется экран
6️⃣ Получение позиции курсора
mouse_pos = pygame.mouse.get_pos()
Возвращает координаты:
(x, y)
Например:
(312, 178)
Это текущая позиция курсора внутри окна.
7️⃣ Проверка наведения
rect.collidepoint(mouse_pos)
Метод collidepoint() проверяет:
Находится ли точка внутри прямоугольника?
Если да → возвращает True
Если нет → возвращает False
8️⃣ Изменение цвета через условие
if rect.collidepoint(mouse_pos):
color = (0, 200, 0)
else:
color = (200, 0, 0)
- Если курсор внутри — прямоугольник зелёный.
- Если снаружи — красный.
Здесь используется логика if — else.
9️⃣ Рисование прямоугольника
pygame.draw.rect(screen, color, rect)
Разберём параметры:
- screen — поверхность
- color — цвет (RGB)
- rect — координаты и размеры
Если добавить четвёртый параметр:
pygame.draw.rect(screen, color, rect, 3)
Прямоугольник будет не закрашенным, а с рамкой толщиной 3 пикселя.
🔟 Обработка клика мыши
📌 Строка:
mouse_click = pygame.mouse.get_pressed()
Что делает эта команда?
Она проверяет состояние кнопок мыши в данный момент времени.
Функция возвращает кортеж из трёх значений:
(левая, средняя, правая)
Каждое значение — это True или False:
- True → кнопка нажата
- False → кнопка не нажата
Пример
mouse_click = pygame.mouse.get_pressed()
if mouse_click[0]:
print("Нажата левая кнопка")
Почему [0]?
Потому что:
- mouse_click[0] — левая кнопка
- mouse_click[1] — средняя
- mouse_click[2] — правая
Индексация начинается с нуля — это правило Python.
Важно понимать
get_pressed() проверяет кнопку пока она удерживается.
Если нужно отследить один щелчок (момент нажатия), обычно используют обработку событий:
for event in pygame.event.get():
if event.type == pygame.MOUSEBUTTONDOWN:
print("Клик!")
Это более «чистый» способ для интерфейсов.
1️⃣1️⃣ Отображение текста
Чтобы вывести текст на экран, нужно выполнить два шага.
Шаг 1. Создать текст
text_surface = font.render("Текст", True, (0, 0, 0))
Параметры:
- "Текст" — строка, которую хотим показать
- True — сглаживание (делает буквы более мягкими)
- (0, 0, 0) — цвет в формате RGB
RGB — это:
- 255 — максимум цвета
- 0 — отсутствие цвета
Например:
- (255, 0, 0) — красный
- (0, 255, 0) — зелёный
- (0, 0, 255) — синий
- (0, 0, 0) — чёрный
Что возвращает render()?
Он создаёт поверхность (Surface) с текстом.
Но текст ещё НЕ показан на экране.
Шаг 2. Разместить текст
screen.blit(text_surface, (x, y))
Что происходит?
- screen — это окно программы
- blit() — «приклеивает» изображение к экрану
- (x, y) — координаты, где появится текст
Например:
screen.blit(text_surface, (100, 200))
Текст появится:
- 100 пикселей от левого края
- 200 пикселей от верхнего края
Простой пример
import pygame
pygame.init()
screen = pygame.display.set_mode((600, 400))
font = pygame.font.SysFont(None, 40)
running = True
while running:
screen.fill((255, 255, 255))
mouse_click = pygame.mouse.get_pressed()
if mouse_click[0]:
text_surface = font.render("Левая кнопка нажата", True, (0, 0, 0))
screen.blit(text_surface, (150, 180))
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
pygame.display.update()
pygame.quit()
Главное запомнить
✔ pygame.mouse.get_pressed() — проверяет, удерживается ли кнопка
✔ [0] — левая кнопка
✔ font.render() — создаёт изображение текста
✔ screen.blit() — размещает его на экране
✔ Без pygame.display.update() ничего не отобразится
1️⃣2️⃣ Обновление экрана
pygame.display.flip()
Без этой команды изменения не будут видны.
🎯 Полная логика работы программы
- Запускается окно.
- Рисуется прямоугольник.
- Курсор двигается.
- Если курсор попадает внутрь:
цвет меняется
при клике появляется сообщение. - Программа работает до закрытия окна.
Заключение
Мы разобрали два важных механизма работы в Pygame — обработку нажатий мыши и вывод текста на экран.
Теперь становится понятно, что:
- pygame.mouse.get_pressed() позволяет узнать, удерживается ли кнопка мыши;
- индексы [0], [1], [2] соответствуют левой, средней и правой кнопкам;
- font.render() создаёт изображение текста;
- screen.blit() размещает его в нужной точке окна;
- обновление экрана завершает процесс отображения.
Эти инструменты — основа любой интерактивной программы. Именно с них начинается создание кнопок, меню, индикаторов, игровых интерфейсов и обучающих приложений.
Важно не просто копировать код, а понимать последовательность действий:
сначала создаём объект, затем размещаем его на поверхности, и только после этого обновляем экран.
Освоив эти принципы, вы сможете уверенно двигаться дальше — к созданию собственных интерфейсов, игровых элементов и визуальных проектов. И чем прочнее будет фундамент, тем надёжнее и интереснее окажутся будущие программы.