Восходи. Сражайся. Покори вершину.
Карточный roguelike на Python + Pygame: процедурная карта путей, глубокий бой с несколькими врагами, реликвии, магазин и встроенный редактор карт. Вдохновлено Slay the Spire, но с темпом боя ближе к Hearthstone — добор карт, энергия каждый ход, выбор цели атаки.
- Быстрый старт
- Управление
- Как проходит забег
- Боевая система
- Карта и узлы
- Контент
- Редактор карт
- Структура проекта
- Настройка и моддинг
- Сохранения
- Лицензия
Требования: Python 3.10+, Windows / macOS / Linux
# Перейти в папку проекта
cd AutoBattler
# (Рекомендуется) виртуальное окружение
python -m venv .venv
.venv\Scripts\activate # Windows
# source .venv/bin/activate # macOS / Linux
# Зависимости и запуск
pip install -r requirements.txt
python main.pyИгра открывается в окне 1280×720, 60 FPS. Шрифты с кириллицей подбираются автоматически (Segoe UI, Arial и др.).
| Действие | Управление |
|---|---|
| Выбор карт, врагов, узлов, кнопок | Мышь |
| Завершить ход в бою | E |
| Вернуться в меню (из боя) | Esc |
| Выйти из редактора карт | Esc |
flowchart LR
A[Главное меню] --> B[Карта путей]
B --> C{Узел}
C -->|Бой / Элита| D[Сражение]
C -->|Костёр| E[Лечение / Кузница]
C -->|Лавка| F[Покупки]
C -->|Сундук| G[Реликвия]
C -->|Событие| H[Случайный исход]
D --> I[Награда: карта]
I --> B
E --> B
F --> B
G --> B
H --> B
C -->|Босс| J[Финальный бой]
J -->|Победа| K[Триумф!]
J -->|Поражение| L[Падение...]
Каждый забег — это 15 этажей процедурной карты. Вы выбираете путь между узлами, собираете колоду, находите реликвии и готовитесь к финальному боссу. Мета-прогресс (статистика, открытые карты и реликвии) сохраняется между забегами.
Бой сочетает deckbuilder-логику с темпом коллекционных карточных игр:
| Механика | Описание |
|---|---|
| Стартовая рука | 5 карт + бонусы реликвий |
| Добор | +5 карт каждый ход (лимит руки — 10) |
| Энергия | Полностью восполняется каждый ход (старт: 3) |
| Несколько врагов | Атакующие карты требуют выбора цели |
| Намерения | Видно, что враг сделает на следующем ходу |
| Журнал боя | Все события боя в реальном времени |
- Атака — урон по выбранной цели (или AOE)
- Защита — броня на текущий ход
- Усиление / Ослабление — баффы и дебаффы
- Добор — дополнительные карты в руку
- Существо — атака + здоровье на поле боя
Более 40 уникальных механик на картах: Уязвимость, Слабость, Сила, Яд, Кровотечение, Оглушение, Пронзающий удар, Execute, Lifesteal, Echo и другие. Комбинируйте эффекты, чтобы превратить скромную колоду в машину уничтожения.
Пассивные артефакты меняют стиль игры: Горящая кровь лечит после боя, Кольцо змеи даёт карты в начале, Философский камень — +1 энергия (но враги тоже сильнее). Стартовая реликвия выдаётся каждому забегу.
| Узел | Что происходит |
|---|---|
| ⚔ Бой | Обычное сражение, награда — золото и карта на выбор |
| 💀 Элита | Сильный враг, повышенная награда |
| 👑 Босс | Финал акта — победа = триумф |
| 🔥 Костёр | Отдых (+30% HP) или кузница (улучшение карты) |
| 🛒 Лавка | Карты (50 з.), реликвии (150 з.), удаление карты (75 з.) |
| 📦 Сундук | Бесплатная реликвия на выбор |
| ❓ Событие | Случайный исход: здоровье, золото, риск |
Карта генерируется заново каждый забег: 7 колонок, 3 ряда, ветвления и недоступные пути создают уникальные маршруты.
| Категория | Количество |
|---|---|
| Уникальные карты | 66+ |
| Враги | 9 (от вошей до боссов) |
| Реликвии | 15 |
| Этажей на карте | 15 |
| Статус-эффектов | ~40 |
Данные лежат в JSON — легко добавлять новых врагов, карты и реликвии без правки кода.
В главном меню — «Редактор карт». Создавайте собственные заклинания и существ:
- название, описание, стоимость, урон / здоровье
- тип: заклинание или существо
- эффект: урон, защита, усиление, ослабление, добор
- живой предпросмотр карты
Кастомные карты сохраняются в data/custom_cards.json и автоматически попадают в пул наград, магазина и стартовых колод.
AutoBattler/
├── main.py # Главный цикл игры, экраны, ввод
├── settings.py # Баланс, цвета, константы
├── locale.py # Русская локализация
├── requirements.txt
│
├── classes/
│ ├── combat.py # Боевая логика
│ ├── card.py # Модель карты
│ ├── card_catalog.py # Загрузка и CRUD карт
│ ├── card_effects.py # ~40 эффектов карт
│ ├── card_editor.py # Редактор карт
│ ├── player.py # Игрок, колода, рука
│ ├── enemy.py # Враги и энкаунтеры
│ ├── relic.py # Реликвии
│ ├── map.py # Процедурная карта
│ ├── game_state.py # Забег и сохранения
│ ├── ui.py # Отрисовка интерфейса
│ ├── effects.py # Визуальные эффекты боя
│ ├── audio.py # Процедурные звуки (без файлов)
│ ├── transitions.py # Переходы и баннеры
│ ├── hover_anim.py # Анимации наведения
│ └── widgets.py # UI-виджеты (инпуты, пикеры)
│
├── data/
│ ├── cards.json # Встроенные карты
│ ├── enemies.json # Враги и паттерны атак
│ ├── relics.json # Реликвии
│ └── custom_cards.json # Ваши карты (создаётся редактором)
│
└── assets/ # Место для будущих спрайтов и звуков
Основные параметры — в settings.py:
STARTING_HP = 85
STARTING_ENERGY = 3
STARTING_GOLD = 99
DRAW_PER_TURN = 5{
"id": "my_strike",
"name": "Мощный удар",
"type": "attack",
"cost": 2,
"value": 12,
"description": "Больно и по делу.",
"rarity": "common"
}Добавьте запись в data/enemies.json с полями hp, intent_pattern, attack_damage и описанием. Паттерн намерений определяет поведение в бою.
| Файл | Назначение | В git |
|---|---|---|
save_data.json |
Статистика, открытый контент между забегами | ❌ игнорируется |
data/custom_cards.json |
Кастомные карты из редактора | ❌ игнорируется |
Чтобы сбросить прогресс — удалите save_data.json.
MIT © 2026 Spirzen
Сделано с Pygame · Без движка · Без ассетов · Только код и JSON