Консольное приложение на Python, моделирующее поведение множества взаимодействующих объектов в дискретном пространстве с пошаговым обновлением состояния и терминальной визуализацией.
Проект реализует симуляцию мира, представленного в виде сетки, в которой сосуществуют различные типы сущностей: активные агенты, ресурсы и статичные объекты. Основной акцент сделан на разделении ответственности между хранением состояния, логикой поведения и визуализацией, что позволяет системе оставаться расширяемой и предсказуемой по мере усложнения.
Симуляция полностью работает в терминале и обновляет своё состояние на каждом шаге выполнения.
Окружение представлено в виде дискретного пространства, разбитого на ячейки. Каждая ячейка может содержать один объект — живое существо, ресурс или препятствие.
Во время выполнения система последовательно применяет набор действий, которые изменяют состояние мира: перемещают сущности, обрабатывают их взаимодействия и обновляют внутренние параметры. Ход симуляции детерминирован и определяется текущим состоянием мира и заданными правилами.
Проект реализован с использованием объектно-ориентированного подхода. Основные элементы игровой логики и состояния представлены в виде отдельных классов, каждый из которых отвечает за свою зону ответственности.
В архитектуре используются следующие принципы:
- разделение данных, поведения и отображения между различными объектами;
- явное управление жизненным циклом игры через управляющие компоненты;
- изоляция логики принятия решений от визуального представления;
- минимизация связности между объектами и их взаимодействие через чёткие интерфейсы;
- возможность расширения функциональности без изменения базовой логики.
Мир отвечает за хранение информации о размещении сущностей и пространственных ограничениях. Прямой доступ к внутренним структурам данных отсутствует — взаимодействие осуществляется через набор методов с понятной семантикой (добавление, удаление, проверки состояния ячеек).
Все объекты симуляции имеют общее концептуальное основание, в то время как активные агенты инкапсулируют собственную логику поведения.
- пассивные сущности занимают пространство или выступают в роли ресурсов;
- активные агенты анализируют окружение и принимают решения на каждом шаге;
- взаимодействие между агентами может приводить к перемещению, изменению состояния или удалению объектов из мира.
Выполнение поведения организовано пошагово и не использует рекурсивный контроль потока.
Центральный управляющий компонент координирует выполнение симуляции:
- инициализирует состояние мира;
- последовательно продвигает симуляцию по шагам;
- применяет упорядоченные действия к текущему состоянию;
- инициирует отрисовку после каждого обновления;
- обрабатывает пользовательские команды, такие как пауза или завершение работы.
Явный управляющий цикл делает процесс выполнения прозрачным и удобным для анализа.
Для принятия решений о перемещении используется отдельный компонент поиска пути, не зависящий от логики конкретных сущностей. Текущая реализация основана на алгоритме поиска в ширину (BFS) и учитывает пространственные ограничения мира.
Благодаря такой изоляции алгоритм поиска пути может быть заменён или улучшен без изменения кода агентов.
Компонент визуализации отвечает исключительно за отображение текущего состояния мира. Он преобразует данные симуляции в текстовое представление и выводит его в терминал с использованием управления курсором и цветового форматирования.
Визуализация не влияет на игровую или симуляционную логику и может быть изменена независимо.
Основные параметры симуляции задаются в simulation/settings.py и могут изменяться без правок основной логики приложения.
Настраиваемые параметры включают:
- размеры мира;
- начальное количество сущностей;
- характеристики агентов (HP, скорость, сила атаки);
- темп обновления симуляции;
- цветовую схему терминала.
Доступные цветовые схемы:
industrial, midnight, ocean, savanna, twilight, glacier, abyss.
Во время выполнения симуляции доступны следующие команды (вводятся с подтверждением клавишей Enter):
p— поставить симуляцию на паузу или продолжить выполнение;q— завершить работу приложения.
- Python 3.9+
- терминальная визуализация (ANSI escape sequences, 256 цветов)
uv— управление зависимостямиloguru— логированиеmypy,ruff— статический анализ и контроль качества кода
Клонируйте репозиторий и перейдите в каталог проекта:
git clone https://github.com/ikorepanov/simulation.git
cd simulationУстановите зависимости:
uv syncЗапустите симуляцию:
python -m simulation.mainили через entry point:
uv run simulationПосле запуска симуляция сразу начнёт выполняться и отображаться в терминале.
Проект функционально завершён и предназначен для демонстрации подходов к проектированию и реализации консольных приложений со сложным внутренним состоянием и чёткими архитектурными границами.