Skip to content

Step-based 2D environment simulation with autonomous agents, pathfinding logic, and custom TUI renderer

License

Notifications You must be signed in to change notification settings

ikorepanov/simulation

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

170 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Simulation

Консольное приложение на 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

После запуска симуляция сразу начнёт выполняться и отображаться в терминале.


Статус проекта

Проект функционально завершён и предназначен для демонстрации подходов к проектированию и реализации консольных приложений со сложным внутренним состоянием и чёткими архитектурными границами.

About

Step-based 2D environment simulation with autonomous agents, pathfinding logic, and custom TUI renderer

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages