Глава 20 · Станьте разработчиком игр с Pygame
Мини-проект — прыгающий мяч
Первая настоящая мини-игра на Pygame — движение, отскоки и игровой цикл в одном коротком проекте.
Соберём всё в один мини-проект: мяч, который отскакивает от всех четырёх стен экрана.
prygayushij_myach.py
import pygame
SHIRINA, VYSOTA = 600, 400
RADIUS = 20
pygame.init()
screen = pygame.display.set_mode((SHIRINA, VYSOTA))
clock = pygame.time.Clock()
x, y = SHIRINA // 2, VYSOTA // 2
dx, dy = 4, 3
rabotaet = True
while rabotaet:
for event in pygame.event.get():
if event.type == pygame.QUIT:
rabotaet = False
x += dx
y += dy
if x - RADIUS < 0 or x + RADIUS > SHIRINA:
dx = -dx
if y - RADIUS < 0 or y + RADIUS > VYSOTA:
dy = -dy
screen.fill((20, 20, 40))
pygame.draw.circle(screen, (255, 100, 100), (int(x), int(y)), RADIUS)
pygame.display.flip()
clock.tick(60)
pygame.quit()
dx = -dx — отражение одной строкой
Смена знака скорости на противоположный — стандартный приём отражения от стены: движение продолжается с той же скоростью, только в обратную сторону, без дополнительных проверок направления.
Полный, уже проверенный файл — отдельно:
📄 projects/pygame/bouncing-ball/bouncing_ball.py
★★ Самостоятельная задача
Меняем цвет при отскоке
При каждом отскоке от стены выбирайте новый случайный цвет мяча (random.choice() из главы 5/11).
★★★ Задача повышенной сложности
Два мяча
Добавьте второй мяч с собственными x, y, dx, dy — оба должны двигаться и отскакивать независимо.
Итоги
Что мы узнали в этой главе
- Pygame не входит в стандартную поставку Python — устанавливается через
pip install. - Игровой цикл в Pygame пишут вручную: обработка событий → обновление позиций → перерисовка →
clock.tick(FPS). screen.fill()в начале каждого кадра предотвращает «следы» от предыдущих кадров.- Персонажей рисуют заново на каждом кадре — движение реализуется просто изменением координат перед отрисовкой.
- Клавиатуру проверяют либо через события (разовые действия), либо через
pygame.key.get_pressed()(непрерывное движение).