BricksBreaker

0
README.md

🎮 Bricks Breaker

Динамичная 2D игра на Python с использованием Pygame, в которой вы уничтожаете блоки, запуская мячи под разными углами. Сложность игры растёт вместе с вашим прогрессом!

🎯 Особенности

  • Динамическая сложность: максимальное HP блоков растёт вместе с количеством мячей
  • Прогрессивная система: скорость мячей и шанс сложных блоков увеличиваются с каждые 100 очков
  • Система бустов: 10% шанс получить дополнительный мяч при разрушении блока
  • Интерактивная механика: выберите угол запуска, наведя мышь и нажав ЛКМ или ПРОБЕЛ
  • Быстрый выход: кнопка спуска всех мячей в левом нижнем углу
  • Сохранение рекордов: лучший результат сохраняется в
    highscore.txt
    и обновляется в реальном времени

📋 Требования

  • Python 3.7+
  • Pygame

🚀 Установка и запуск

1. Клонируйте репозиторий

2. Создайте виртуальное окружение (опционально, но рекомендуется)

3. Установите зависимости

4. Запустите игру

🎮 Как играть

Управление

  • Мышь: наведите на точку запуска мячей, чтобы выбрать угол
  • ЛКМ / ПРОБЕЛ: зафиксировать угол и запустить мячи
  • Кнопка спуска (левый нижний угол): если упал хотя бы один мяч, нажмите эту кнопку чтобы спустить все оставшиеся мячи и начать новый раунд

Интерфейс

  • Левый верхний угол: текущий счёт
  • Правый нижний угол: количество мячей

Механика

  1. Запуск мячей: в начале раунда выберите угол запуска. Прозрачная линия показывает направление.

  2. Повреждение блоков:

    • Каждый мяч может ударить блок несколько раз
    • При попадании HP блока уменьшается на 1
    • Разрушенный блок даёт 10 × (начальное HP) очков
  3. Физика:

    • Мячи отскакивают от стен и блоков по закону отражения
    • Мяч исчезает, если упадёт ниже игровой зоны (Y ≥ 550px)
  4. Бусты:

    • При разрушении блока с 10% шансом появляется буст (золотой шар)
    • Буст сразу же добавляет +1 мяч к вашему счётчику
    • Максимально 5 мячей одновременно
  5. Конец раунда:

    • Раунд заканчивается, когда все мячи упали
    • Оставшиеся блоки сдвигаются вниз на одну строку
    • В верхней части генерируются новые блоки
  6. Game Over:

    • Если любой блок достигает линии Y=500px, игра заканчивается
    • Ваш счёт сравнивается с рекордом и сохраняется

Сложность

ПараметрНачальное значениеПрирост
Скорость мяча10.0 px/frame+15% каждые 100 очков
Диапазон HP блоков1-4 (при 1 мяче)Верхняя граница: 2 + (мячи-1) × 3
Шанс высокого HPРастёт с мячами+20% на высокое HP каждые 100 очков
BricksBreaker/ ├── main.py # Основной цикл игры и управление состоянием ├── game_objects.py # Классы игровых объектов ├── utils.py # Константы, утилиты и загрузка/сохранение ├── highscore.txt # Файл с лучшим результатом ├── .gitignore # Git конфиг └── README.md # Этот файл

Основные модули

main.py
- Основной модуль

  • Класс
    Game
    : управляет игровым состоянием, логикой и отрисовкой
  • Состояния:
    WAITING_FOR_ANGLE
    ,
    PLAYING
    ,
    GAME_OVER
  • Методы:
    • handle_events()
      : обработка ввода пользователя
    • update()
      : обновление логики (движение, столкновения, раунды)
    • draw()
      : отрисовка всех объектов и UI
    • spawn_new_blocks()
      : генерация новых блоков с учётом сложности
    • launch_balls()
      : запуск мячей в начале раунда

game_objects.py
- Игровые объекты

  • Класс

    Ball
    : мяч с физикой и обнаружением столкновений

    • Отскок от стен и блоков
    • AABB коллизия
  • Класс

    Block
    : блок с системой HP

    • Цвет зависит от HP (зелёный → жёлтый → красный → ... → серый)
    • Проверка условия game over
  • Класс

    Powerup
    : буст для получения дополнительного мяча

    • Падает вниз
    • Исчезает при падении ниже игровой зоны
  • Класс

    DropButton
    : кнопка спуска мячей

    • Отрисовка с стрелкой вниз
    • Проверка клика

utils.py
- Утилиты и константы

  • Константы игры: размеры окна, границы, цвета, скорости
  • Система цветов: динамическая система с циклированием
  • Функции:
    • load_highscore()
      : загрузка рекорда из файла
    • save_highscore(score)
      : сохранение рекорда
    • generate_blocks(count)
      : генерация случайных блоков
    • get_block_color(hp)
      : получение цвета по HP

🔧 Технические детали

Физика

  • FPS: 60 (фиксированный timestep)
  • Коллизии: AABB (axis-aligned bounding box) с предотвращением залипания
  • Отражение: угол падения = угол отражения

Параметры игры (в
utils.py
)

📊 Система баллов

ДействиеБаллы
Разрушить блок HP=110
Разрушить блок HP=220
Разрушить блок HP=330
...10 × HP

🎨 Цвета блоков

HPЦветHex
1Зелёный#2ecc71
2Жёлтый#f1c40f
3Красный#e74c3c
4Фиолетовый#9b59b6
5Тёмно-синий#344a5e
6Бирюзовый#1abc9c
7+Циклирование по цветам 1-6-

💾 Файл сохранения

highscore.txt
содержит ваш лучший результат и обновляется в реальном времени после каждого уничтоженного блока (если счёт превышает текущий рекорд).

🐛 Известные особенности

  • Мячи могут иногда "залипать" в угловых случаях (спроектировано с предотвращением)
  • При очень высоких скоростях возможны пропуски коллизий (минимизировано через AABB)

👨‍💻 Автор

Создано как учебный проект для изучения Pygame и разработки игр на Python.


Удачи в игре! 🚀