Ниже приведён код простой игры «Поймай шарик».
import pygame
import random
# Инициализация
pygame.init()
WIDTH, HEIGHT = 600, 400
screen = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("Поймай шарик!")
# Цвета
WHITE = (255, 255, 255)
RED = (255, 0, 0)
BLUE = (0, 0, 255)
# Игровые объекты
ball_radius = 15
ball_x = random.randint(ball_radius, WIDTH - ball_radius)
ball_y = 0
ball_speed = 5
basket_width, basket_height = 80, 20
basket_x = WIDTH // 2
basket_y = HEIGHT - basket_height - 10
basket_speed = 8
score = 0
font = pygame.font.SysFont(None, 36)
# Игровой цикл
running = True
clock = pygame.time.Clock()
while running:
screen.fill(WHITE)
# События
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
# Управление
keys = pygame.key.get_pressed()
if keys[pygame.K_LEFT] and basket_x > 0:
basket_x -= basket_speed
if keys[pygame.K_RIGHT] and basket_x < WIDTH - basket_width:
basket_x += basket_speed
# Движение шарика
ball_y += ball_speed
if ball_y > HEIGHT:
score -= 1
ball_x = random.randint(ball_radius, WIDTH - ball_radius)
ball_y = 0
# Проверка столкновения
if (basket_y < ball_y + ball_radius < basket_y + basket_height and
basket_x < ball_x < basket_x + basket_width):
score += 1
ball_x = random.randint(ball_radius, WIDTH - ball_radius)
ball_y = 0
# Отрисовка
pygame.draw.circle(screen, RED, (ball_x, ball_y), ball_radius)
pygame.draw.rect(screen, BLUE, (basket_x, basket_y, basket_width, basket_height))
text = font.render(f"Счёт: {score}", True, (0, 0, 0))
screen.blit(text, (10, 10))
pygame.display.flip()
clock.tick(30)
pygame.quit()
pygame.init() — запуск всех модулей Pygame.pygame.display.set_mode((WIDTH, HEIGHT)) — создать окно заданного размера.pygame.display.set_caption("Название") — установить заголовок окна.pygame.display.flip() — обновить экран (показать всё нарисованное).screen.fill(color) — закрасить экран одним цветом.pygame.draw.circle(surface, color, center, radius) — рисует круг.pygame.draw.rect(surface, color, rect) — рисует прямоугольник.Полезно ещё:
pygame.draw.line(surface, color, start_pos, end_pos, width) — линия.pygame.draw.ellipse(surface, color, rect) — овал.pygame.draw.polygon(surface, color, point_list) — многоугольник.clock = pygame.time.Clock() — объект для контроля FPS.clock.tick(fps) — ограничить скорость цикла до fps кадров/сек.pygame.event.get() — получить список событий (клавиши, выход).pygame.QUIT — событие «закрыть окно».pygame.key.get_pressed() — список всех нажатых клавиш.pygame.K_LEFT, pygame.K_RIGHT, pygame.K_UP, pygame.K_DOWN — константы клавиш.pygame.font.SysFont(None, size) — выбрать системный шрифт.font.render(text, antialias, color) — создать текстовую картинку.screen.blit(text_surface, (x, y) — вывести текст или картинку на экран.pygame.Rect(x, y, w, h) — прямоугольник (удобен для объектов).rect.colliderect(other_rect) — проверка пересечения прямоугольников.rect.collidepoint(x, y) — проверка попадания точки внутрь прямоугольника.import random → random.randint(a, b) — случайное целое число.Идея: сделать игру «своей»: заменить фон, раскрасить объекты, добавить рамку и декоративные линии/многоугольники.
Вам может понадобиться:
screen.fill(color: tuple[int,int,int]) -> Nonepygame.draw.circle(surface: pygame.Surface, color: tuple[int,int,int], center: tuple[int,int], radius: int) -> pygame.Rectpygame.draw.rect(surface: pygame.Surface, color: tuple[int,int,int], rect: tuple[int,int,int,int] | pygame.Rect) -> pygame.Rectpygame.draw.line(surface: pygame.Surface, color: tuple[int,int,int], start_pos: tuple[int,int], end_pos: tuple[int,int], width: int = 1) -> pygame.Rectpygame.draw.polygon(surface: pygame.Surface, color: tuple[int,int,int], points: list[tuple[int,int]], width: int = 0) -> pygame.RectИдея: шарик двигается по диагонали и отскакивает от границ экрана.
Вам может понадобиться:
clock = pygame.time.Clock()clock.tick(fps: int) -> intИдея: проверять столкновения «по-настоящему» с помощью pygame.Rect для корзины и шарика (обёртка вокруг круга).
Вам может понадобиться:
pygame.Rect(x: int, y: int, w: int, h: int) -> pygame.Rectpygame.Rect.colliderect(self: pygame.Rect, other: pygame.Rect) -> boolpygame.Rect.collidepoint(self: pygame.Rect, x: int, y: int) -> boolИдея: за пойманное — очки, за промах — минус жизнь; при нуле жизней — Game Over.
Вам может понадобиться:
pygame.font.SysFont(name: str | None, size: int) -> pygame.font.Fontpygame.font.Font.render(self, text: str, antialias: bool, color: tuple[int,int,int]) -> pygame.Surfacescreen.blit(source: pygame.Surface, dest: tuple[int,int]) -> pygame.Rectpygame.display.set_caption(title: str) -> NoneИдея: на экране летают сразу несколько шариков с разными параметрами.
Вам может понадобиться:
pygame.draw.circle(...), pygame.Rect(...), pygame.Rect.colliderect(...)random.randint(a: int, b: int) -> intИдея: добавить три типа — обычные (синие), бонусные (зелёные) и плохие (чёрные). Обычные дают +1 очко, бонусные — больше очков (например, +3), «плохие» ловить нельзя — иначе минус жизнь.
Вам может понадобиться:
pygame.Rect(...), pygame.Rect.colliderect(...)pygame.font.Font.render(...), screen.blit(...)random.randint(a: int, b: int) -> intИдея: по мере роста счёта ускорять шарики и/или постепенно добавлять новые.
Вам может понадобиться:
random.randint(a: int, b: int) -> intИдея: два игрока управляют «ракетками» слева и справа; мяч отскакивает от стен и ракеток; очки считаются за пропущенный мяч.
Ссылки: Википедия, онлайн-версия
Идея: игрок управляет кораблём, уклоняется от астероидов и пуль, может стрелять; потоки врагов, столкновения «пуля-враг», счёт/жизни.
Ссылки: Википедия