Представляет собой небольшую экосистему, содержащую поле N*M, различные обьекты и существа, которые каждый ход могут передвигаться или кушать. Программа выполнена в консольном стиле, но составлена заготовка в виде интерфейса для дальнейшего внедрения новых рендеров. Проект в целом следует за требованиями ТЗ, но также имеет некие особенности.
- 🦓 - Травоядное, каждый ход старается найти траву
- 🦁 - Хищник, каждый ход старается найти травоядное и съесть его
- 🍀 - Трава, не имеет собственного функционала, но является едой для травоядных
- 🌴 - Дерево, на данный момент не имеет собственного функционала
- 🌑 - Камень, на данный момент не имеет собственного функционала
- Пользователь настраивает симуляцию при старте программы(размер карты, количество ходов, режим рендера)
- Два режима рендера(для каждого существа и для всех существа сразу)
- Добавлена механика голода для существ
- Добавлена механика размножения для существ
- Entity - абстрактный класс, от которого наследуются животные и обьекты(деревья,камни,трава)
- Creature - абстрактный класс, от которого наследуются животные(травоядные,хищники)
- Action - общий интерфейс для инициализации и действий, совершаемых каждый ход
- initializeActions(InitializeEntityCreator, MapCreator) - действия, совершаемые в начале игры
- turnActions(AllCreaturesMove, TurnEntityCreator) - действия, совершаемые каждый ход
- PathFinder - поиск пути по BFS
- services(CreatureMoveService, HungryService, MultiplyService) - утилитные классы, используемые во время обработки хода, вынесенные в отдельные классы для разделения логики и повторного использования
- EntityCreator - абстрактный класс, на основе которого происходит спавн сущностей. Содержит коллекцию констант шансов появления существ.
- EntitySpawnChance - рекорд для удобного хранения шанса появления существ
- utils(CellUtils, CreatureUtils, MapUtils) - утилиты для работы с координатами, животными, картой
- Renderer - общий интерфейс для всех рендеров, если в дальнейшем нужно будет сделать разные рендереры.
- ConsoleRenderer - одна из реализаций интерфейса рендерера, отрисовывает карту в консольном виде
- RenderMode - enum, описывающий методы отрисовки карты, созданный для сокращения кода, а также возможности добавления новых режимов отрисовки в будущем.
- ConsoleWriter - утилитный класс для вывода информации в консоль
- ConsoleInput - утилитный класс для сбора информации из консоли и настройки симуляции в соответствии с решением пользователя
- Simulation - основной класс, выполняющий ходы
