BricksBreaker
3 месяца назад
3 месяца назад
3 месяца назад
3 месяца назад
3 месяца назад
README.md
🎮 Bricks Breaker
Динамичная 2D игра на Python с использованием Pygame, в которой вы уничтожаете блоки, запуская мячи под разными углами. Сложность игры растёт вместе с вашим прогрессом!
🎯 Особенности
- Динамическая сложность: максимальное HP блоков растёт вместе с количеством мячей
- Прогрессивная система: скорость мячей и шанс сложных блоков увеличиваются с каждые 100 очков
- Система бустов: 10% шанс получить дополнительный мяч при разрушении блока
- Интерактивная механика: выберите угол запуска, наведя мышь и нажав ЛКМ или ПРОБЕЛ
- Быстрый выход: кнопка спуска всех мячей в левом нижнем углу
- Сохранение рекордов: лучший результат сохраняется в
и обновляется в реальном времениhighscore.txt
📋 Требования
- Python 3.7+
- Pygame
🚀 Установка и запуск
1. Клонируйте репозиторий
2. Создайте виртуальное окружение (опционально, но рекомендуется)
3. Установите зависимости
4. Запустите игру
🎮 Как играть
Управление
- Мышь: наведите на точку запуска мячей, чтобы выбрать угол
- ЛКМ / ПРОБЕЛ: зафиксировать угол и запустить мячи
- Кнопка спуска (левый нижний угол): если упал хотя бы один мяч, нажмите эту кнопку чтобы спустить все оставшиеся мячи и начать новый раунд
Интерфейс
- Левый верхний угол: текущий счёт
- Правый нижний угол: количество мячей
Механика
-
Запуск мячей: в начале раунда выберите угол запуска. Прозрачная линия показывает направление.
-
Повреждение блоков:
- Каждый мяч может ударить блок несколько раз
- При попадании HP блока уменьшается на 1
- Разрушенный блок даёт 10 × (начальное HP) очков
-
Физика:
- Мячи отскакивают от стен и блоков по закону отражения
- Мяч исчезает, если упадёт ниже игровой зоны (Y ≥ 550px)
-
Бусты:
- При разрушении блока с 10% шансом появляется буст (золотой шар)
- Буст сразу же добавляет +1 мяч к вашему счётчику
- Максимально 5 мячей одновременно
-
Конец раунда:
- Раунд заканчивается, когда все мячи упали
- Оставшиеся блоки сдвигаются вниз на одну строку
- В верхней части генерируются новые блоки
-
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 - Основной модуль
main.py
- Класс
: управляет игровым состоянием, логикой и отрисовкойGame - Состояния:
,WAITING_FOR_ANGLE,PLAYINGGAME_OVER - Методы:
: обработка ввода пользователяhandle_events(): обновление логики (движение, столкновения, раунды)update(): отрисовка всех объектов и UIdraw(): генерация новых блоков с учётом сложностиspawn_new_blocks(): запуск мячей в начале раундаlaunch_balls()
game_objects.py - Игровые объекты
game_objects.py
-
Класс
: мяч с физикой и обнаружением столкновенийBall- Отскок от стен и блоков
- AABB коллизия
-
Класс
: блок с системой HPBlock- Цвет зависит от HP (зелёный → жёлтый → красный → ... → серый)
- Проверка условия game over
-
Класс
: буст для получения дополнительного мячаPowerup- Падает вниз
- Исчезает при падении ниже игровой зоны
-
Класс
: кнопка спуска мячейDropButton- Отрисовка с стрелкой вниз
- Проверка клика
utils.py - Утилиты и константы
utils.py
- Константы игры: размеры окна, границы, цвета, скорости
- Система цветов: динамическая система с циклированием
- Функции:
: загрузка рекорда из файлаload_highscore(): сохранение рекордаsave_highscore(score): генерация случайных блоковgenerate_blocks(count): получение цвета по HPget_block_color(hp)
🔧 Технические детали
Физика
- FPS: 60 (фиксированный timestep)
- Коллизии: AABB (axis-aligned bounding box) с предотвращением залипания
- Отражение: угол падения = угол отражения
Параметры игры (в utils.py)
utils.py
📊 Система баллов
| Действие | Баллы |
|---|---|
| Разрушить блок HP=1 | 10 |
| Разрушить блок HP=2 | 20 |
| Разрушить блок HP=3 | 30 |
| ... | 10 × HP |
🎨 Цвета блоков
| HP | Цвет | Hex |
|---|---|---|
| 1 | Зелёный | #2ecc71 |
| 2 | Жёлтый | #f1c40f |
| 3 | Красный | #e74c3c |
| 4 | Фиолетовый | #9b59b6 |
| 5 | Тёмно-синий | #344a5e |
| 6 | Бирюзовый | #1abc9c |
| 7+ | Циклирование по цветам 1-6 | - |
💾 Файл сохранения
содержит ваш лучший результат и обновляется в реальном времени после каждого уничтоженного блока (если счёт превышает текущий рекорд).highscore.txt
🐛 Известные особенности
- Мячи могут иногда "залипать" в угловых случаях (спроектировано с предотвращением)
- При очень высоких скоростях возможны пропуски коллизий (минимизировано через AABB)
👨💻 Автор
Создано как учебный проект для изучения Pygame и разработки игр на Python.
Удачи в игре! 🚀