Пример мини-игры на Pygame

Ниже приведён код простой игры «Поймай шарик».

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

1. Инициализация и окно

2. Цвета и рисование

Полезно ещё:

3. Игровой цикл и время

4. События и управление

5. Работа с текстом

6. Проверка столкновений

7. Полезные стандартные модули

Что можно улучшить?

1) Визуал: свой фон, цвета, рамки/декор

Идея: сделать игру «своей»: заменить фон, раскрасить объекты, добавить рамку и декоративные линии/многоугольники.

Вам может понадобиться:

2) Движение с отскоками от стен

Идея: шарик двигается по диагонали и отскакивает от границ экрана.

Вам может понадобиться:

3) Точное столкновение через прямоугольники

Идея: проверять столкновения «по-настоящему» с помощью pygame.Rect для корзины и шарика (обёртка вокруг круга).

Вам может понадобиться:

4) Счёт, жизни и экран Game Over

Идея: за пойманное — очки, за промах — минус жизнь; при нуле жизней — Game Over.

Вам может понадобиться:

5) Несколько шариков одновременно

Идея: на экране летают сразу несколько шариков с разными параметрами.

Вам может понадобиться:

6) Разные типы шариков: обычные, бонусные и «плохие»

Идея: добавить три типа — обычные (синие), бонусные (зелёные) и плохие (чёрные). Обычные дают +1 очко, бонусные — больше очков (например, +3), «плохие» ловить нельзя — иначе минус жизнь.

Вам может понадобиться:

7) Динамическая сложность

Идея: по мере роста счёта ускорять шарики и/или постепенно добавлять новые.

Вам может понадобиться:

Игры до которых можно попробовать довести наши наработки:

Pong (на двоих)

Идея: два игрока управляют «ракетками» слева и справа; мяч отскакивает от стен и ракеток; очки считаются за пропущенный мяч.

Ссылки: Википедия, онлайн-версия

«Astro Fighter» / Dodge + стрельба

Идея: игрок управляет кораблём, уклоняется от астероидов и пуль, может стрелять; потоки врагов, столкновения «пуля-враг», счёт/жизни.

Ссылки: Википедия

← Вернуться на главную