Небольшая симуляция «живого мира» с управлением из консоли и визуализацией на Swing (отдельное окно).
Помимо неподвижных объектов: камней, деревьев, есть двое видов существ - это травоядные и хищники. Травоядные - питаются травой (она постепенно растет), хищники - травоядными.
- Требования, чтобы запустить проект
- Быстрый старт
- Управление
- Настройки при старте
- Логи
- Скриншоты.
Некоторые заметки по механике симуляции, которые позволят вам лучше понять заложенные правила.
-
Все существа движутся по карте к своим целям по кратчайшему маршруту (сейчас используется алгоритм поиска в ширину), минуя непроходимые объекты (могут быть статические и нет).
-
Приоритет у травоядных вблизи - всегда убежать: т.е. если оно встретило хищника (1 клетка от травоядного) от себя, оно не будет даже стремиться к траве.
-
У всех животных, будь то хищник или травоядное, постепенно уменьшается здоровье (оно голодает) и если здоровье = 0, животное умирает.
-
Все животные имеют случайные скорость, здоровье и очки передвижения.
-
Поскольку в контексте игры травоядные более уязвимы, у них скорость более стабильна (от 2 до 4 против 1 до 4 у хищников).
-
Травоядные улучшают здоровье съедая траву (питательная ценность коей случайна, но выверена) и "толстеют".
-
При 1 атаке не всегда хищник может убить травоядное за ход.
-
Когда трава съедена или животное умерло (любым путем) - оно снимается с карты.
-
Трава также имеет особенность регенерировать (случайно возникатаь на карте) до определенного капа.
О том как симуляцию запустить, как все это дело выглядит - можно увидеть ниже, но проще скачать и поиграться (:
Требования, чтобы запустить проект
- Java 17+
- (Опционально) Maven 3.8+
- (Желательно) среда разработки, например IDEA
Быстрый старт
- Проект расположен https://github.com/timk01/Simulation
- Скачайте его тем или иным способом: как архив или - склонируйте (SSH/HTTPS)
- Откройте проект в IntelliJ IDEA / Eclipse / другой IDE
- Запустите класс
org.simulation.Simulation
- В консоли следуйте подсказкам (см. ниже).
- Убедитесь, что в
pom.xml
подключён maven-shade-plugin (в текущем - уже все "под ключ", ничего дополнительно делать не нужно). - Соберите и запустите (берутся базовые настройки):
mvn -q -DskipTests package
java -jar target/*-shaded.jar
либо:
Запуск JAR (вариант №1 — UTF‑8):
java -Dsim.console.encoding=UTF-8 -jar target/*-shaded.jar
либо:
Запуск JAR (вариант №2 — Windows‑1251):
java -Dsim.console.encoding=windows-1251 -jar target/*-shaded.jar
- Откройте Run/Debug Configurations → вашу конфигурацию запуска.
- В поле VM options добавьте ровно один из вариантов:
-Dsim.console.encoding=UTF-8
-Dsim.console.encoding=windows-1251
- Запускайте обычной «зелёной кнопкой».
Если ни 1 из способов сборки В не работает - вернитесь к способу А.
ИЛИ если у вас внезапно несколько shaded-джаров, укажите точное имя файла, например:
java -jar target/Simulation-1.0-SNAPSHOT-shaded.jar
Управление
Вначале вы выбираете, начать ли симуляцию (повторяемо для новой симуляции, если не наскучила/попробовать еще)
- д — ведет к выбору пресетов
- н — немедленно завершает симуляцию
Здесь мы выбираем карту + настройки (по принципу все включено):
- 1 — маленькая (12×12)
- 2 — средняя (дефолт) (20×20, по умолчанию)
- 3 — большая (30×30)
- ентер/пробел — карта и животный мир по-умолчанию
- д — ведет к возможности выбора
- н — нет (дефолт)
-- если да, можно выбрать цифрами паузы/ходы, если нет - см. управление
--- как только мы выбрали настройки, вы увидите справа панель симуляции (со всеми объектами и интераактивной статистикой) --- симуляцией можно интерактивно управлять с помощью клавиш ниже
- ф — пауза
- ы — продолжить (пока не будет пауза/выход)
- в — сделать ровно один ход
- ц — выход (корректно остановить симуляцию и выйти к самому началу)
Настройки при старте
- Пресет карты:
1
— маленькая (12×12),2
— средняя (20×20),3
— большая (30×30) - Задержка между ходами (порядка
3
сек) - Лимит ходов (
0
— бесконечно)
Логи
Подробные логи и финальный отчёт: можно посмотреть здесь: logs/simulation.log
.
Как правило, если вам мало статистики в визуальном оформлении - смотрите строчку ==== SIMULATION REPORT ====
(или, более детальные логи выше по файлу)
Уровни логирования настраиваются через src/main/resources/logback.xml
.