Це репозиторій для розробки текстової рольової гри на Python, натхненної глибокими ігровими механіками Path of Exile. Проект фокусується на створенні масштабованої основи, яка дозволить легко додавати новий контент: предмети, ворогів, навички та ігрові події.
Гра є текстовою RPG, де гравець досліджує світ, бореться з ворогами, збирає екіпірування та прокачує свого персонажа. В основі лежить гнучка система розрахунку характеристик та бойова система, що враховує безліч параметрів.
- Чиста архітектура: Проект побудований на принципах Clean Architecture, що забезпечує повне розділення бізнес-логіки (ядра гри) від інфраструктурних деталей (бази даних, інтерфейсу). Це робить код гнучким, тестованим та легким для розширення.
- Зберігання даних в PostgreSQL: Динамічні дані гри (персонажі, їхній прогрес, інвентар) зберігаються в базі даних PostgreSQL, що забезпечує надійність та швидкість.
- Конфігурація через JSON: Статичні ігрові дані — базові предмети, типи ворогів, локації — зберігаються у зовнішніх JSON-файлах. Це дозволяє змінювати та додавати контент без втручання в код.
- Глибока система характеристик: Розрахунок параметрів персонажа (здоров'я, броня, ухилення, урон, критичні удари) базується на формулах, натхненних Path of Exile.
- Готовність до Docker: Проект налаштований для запуску в Docker-контейнерах, що спрощує розгортання та розробку.
Проект використовує 4-шарову модель Чистої архітектури для максимальної гнучкості та підтримки.
┌─────────────────────────────────────────────────────────┐
│ Presentation Layer │
│ (CLI / Telegram Bot / REST API) │
└────────────────────┬────────────────────────────────────┘
│
┌────────────────────▼────────────────────────────────────┐
│ Application Layer (Use Cases) │
│ (Сценарії використання: створити персонажа, атакувати) │
└────────────────────┬────────────────────────────────────┘
│
┌────────────────────▼────────────────────────────────────┐
│ Domain Layer │
│ (Ядро гри: сутності, бізнес-правила, логіка) │
└────────────────────┬────────────────────────────────────┘
│
┌────────────────────▼────────────────────────────────────┐
│ Infrastructure Layer │
│ (Робота з PostgreSQL, завантаження конфігурацій) │
└─────────────────────────────────────────────────────────┘
- Domain Layer: Не залежить ні від чого. Тут живе вся основна логіка гри.
- Application Layer: Координує Domain та залежить тільки від нього.
- Infrastructure & Presentation Layers: Зовнішні шари, які залежать від внутрішніх, але їх реалізація може бути легко замінена.
- Мова: Python 3.12
- База даних: PostgreSQL
- Взаємодія з БД: SQLAlchemy, Alembic
- Формат конфігурацій: JSON
- Контейнеризація: Docker, Docker Compose
Цей спосіб запустить гру та базу даних в ізольованих контейнерах.
Зберіть та запустіть контейнери:
bash docker-compose up --build
-
Встановіть та запустіть PostgreSQL.
-
Створіть базу даних та користувача для гри.
-
Налаштуйте змінні середовища: Створіть файл
.envта вкажітьDATABASE_URL:DATABASE_URL=postgresql://user:password@localhost:5432/rpg_game -
Встановіть залежності:
pip install -r requirements.txt
-
Застосуйте міграції бази даних:
alembic upgrade head
-
Запустіть гру:
python main.py