JavaRush /Курсы /Модуль 2. Java Core /Задание на итоговый проект модуля 2

Задание на итоговый проект модуля 2

Модуль 2. Java Core
20 уровень , 0 лекция
Открыта

Твоя задача — запрограммировать модель острова с изменяемыми параметрами, состоящую из массива локаций (например, 100х20 клеток). Локации будут заполнены растительностью и животными. Животные могут:

  • есть растения и/или других животных (если в их локации есть подходящая еда),
  • передвигаться (в соседние локации),
  • размножаться (при наличии пары в их локации),
  • умирать от голода или быть съеденными.

ООП

Создавая разнообразие животных, нужно по максимуму использовать ООП: все виды будут происходить от одного абстрактного класса Animal, который будет содержать поведение, общее для всех животных. Если у конкретных животных будут особенности питания, размножения, передвижения и т. д., то для них нужно будет переопределить методы класса Animal.

Что нужно сделать:

1. Создай иерархию классов:

  • Хищник: Волк, Удав, Лиса, Медведь, Орел

  • Травоядные: Лошадь, Олень, Кролик, Мышь, Коза, Овца, Кабан, Буйвол, Утка, Гусеница

  • Растения

В таблице ниже приведено, с какой вероятностью животное съедает "пищу", если они находятся на одной клетке. Давай посмотрим на ситуацию "волк ест кролика". В таблице число 60. Это означает, что волк может съесть кролика, если они на одной клетке, с вероятностью 60%. Нужно использовать многопоточный random.

Волк Удав Лиса Медведь Орел Лошадь Олень Кролик Мышь Коза Овца Кабан Буйвол Утка Гусеница Растения
Волк - 0 0 0 0 10 15 60 80 60 70 15 10 40 0 0
Удав 0 - 15 0 0 0 0 20 40 0 0 0 0 10 0 0
Лиса 0 0 - 0 0 0 0 70 90 0 0 0 0 60 40 0
Медведь 0 80 0 - 0 40 80 80 90 70 70 50 20 10 0 0
Орел 0 0 10 0 - 0 0 90 90 0 0 0 0 80 0 0
Лошадь 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 100
Олень 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 100
Кролик 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 100
Мышь 0 0 0 0 0 0 0 0 - 0 0 0 0 0 90 100
Коза 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 100
Овца 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 100
Кабан 0 0 0 0 0 0 0 0 50 0 0 - 0 0 90 100
Буйвол 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 100
Утка 0 0 0 0 0 0 0 0 0 0 0 0 0 - 90 100
Гусеница 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 100

Характеристики животных:

Вес одного животного, кг Максимальное количество животных этого вида на одной клетке Скорость перемещения, не более чем, клеток за ход Сколько килограммов пищи нужно животному для полного насыщения
Волк 50 30 3 8
Удав 15 30 1 3
Лиса 8 30 2 2
Медведь 500 5 2 80
Орел 6 20 3 1
Лошадь 400 20 4 60
Олень 300 20 4 50
Кролик 2 150 2 0,45
Мышь 0.05 500 1 0.01
Коза 60 140 3 10
Овца 70 140 3 15
Кабан 400 50 2 50
Буйвол 700 10 3 100
Утка 1 200 4 0,15
Гусеница 0.01 1000 0 0
Растения 1 200 N/A N/A

2. У животного должны быть методы: покушать, размножиться, выбрать направление передвижения.

3. В классах травоядного и хищника можно реализовать метод покушать. Но обрати внимание, есть травоядное утка, которое ест гусеницу.

4. В конкретных классах того или иного вида можно дорабатывать все методы под особенности животного.

5. Должно быть создано минимум 10 видов травоядных и 5 видов хищников (описаны в п. 1).

Многопоточность

Конечно, можно написать всю программу в одном потоке, используя только циклы. Но нам нужно практически поработать с многопоточностью, поэтому обязательно нужно использовать потоки и пулы потоков. Один scheduled пул — для запуска по расписанию задания роста растений, задания жизненного цикла животных, и задания вывода статистики по системе. Как вариант, можно выводить статистику в одном задании с растениями или животными. Внутри задания жизненного цикла животных можно использовать еще один пул потоков — обычный. Какие задачи отдавать на выполнение этому пулу — решай самостоятельно.

Обязательная часть задания:

  • Иерархия животных (ООП)
  • Поведение животных
  • Многопоточность
  • Статистика по состоянию острова на каждом такте (в консоль)

Опциональная часть задания:

  • Вынести параметры в одно место, чтоб было удобно управлять “симуляцией”
  • Графика вместо консольной статистики. Это может быть как псевдо-графика в консоли, так и JavaFX, Swing…
  • Добавь другие факторы, которые могут влиять на симуляцию:
    • больше видов животных
    • разные виды растений
    • кастомное поведение для группы животных (к примеру, волки охотятся и передвигаются не по одному, а стаей)
    • рельеф на земле, в том числе река, которая препятствует передвижению некоторых животных

О параметрах (если решишь делать)

Чтобы при запуске программы было удобно менять различные ее параметры (размер острова, максимально допустимое количество растений/животных в одной клетке, вероятность передвижения того или иного вида животных, количество приплода у различных видов и т. д.), нужно все эти параметры вынести куда-то, например, в отдельный класс. Должна быть возможность изменять следующие параметры:

  • размер острова
  • длительность такта симуляции
  • количество животных каждого вида на старте симуляции
  • условие остановки симуляции (например, умерли все животные)
  • количество детенышей у каждого вида животных

Юникод (если решишь делать псевдографику)

Для изображения животных можно использовать юникод символы: 🐃, 🐻, 🐎, 🦌, 🐗, 🐑, 🐐, 🐺, 🐍, 🦊, 🦅, 🐇, 🦆, 🐁, 🐛.

Проект проверяется во время прохождения его группой


Обзор проекта

Комментарии (16)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
Роман Уровень 87
11 августа 2025
Проект классный. Много, конечно, времени ушло, но оно того стоило))
Максим Уровень 115
19 марта 2025
Проект интересный, но ТЗ очень расплывчатое. По сравнению с шифровальщиком слишком мало объяснений как стоит организовать проект.
Алексей Уровень 106
4 ноября 2024
Хороший и очень интересный проект, всем советую к завершению)))
Денис Уровень 68
30 марта 2025
Спасибо, начинаю решать )
Олег Уровень 106 Expert
30 августа 2024
Это было круто) 4 бессонных ночи
Адам Уровень 109
31 августа 2024
я догоняю тебяя
Алексей Уровень 68 Expert
30 апреля 2024
done 😌
Иван Корниенко Уровень 109
27 апреля 2024
jvatechs Уровень 111 Expert
26 апреля 2023
Если брать первую часть задания (ООП), то сделать все в циклах не особо сложно. А вот с многопоточкой немного придется поломать голову.
Николай Уровень 70 Expert
23 апреля 2023
сложнее, намного сложнее, чем первый проект
Pavel Palekhov Уровень 55 Expert
11 августа 2022
Бедные растения, сколько же у них хейтеров.... Еще и шанса не оставляют(((
Владислав Уровень 108 Expert
16 июля 2022
В начале модуля 2: Вы узнаете, зачем нужен Reflection API, аннотации в Java, а также напишете простой чат, используя сокеты. В конце модуля 2: Твоя задача — запрограммировать модель острова с изменяемыми параметрами, состоящую из массива локаций. Это так и задумано?