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

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

Открыта

Твоя задача — запрограммировать модель острова с изменяемыми параметрами, состоящую из массива локаций (например, 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, 18:36
Проект классный. Много, конечно, времени ушло, но оно того стоило))
Максим
Уровень 115
19 марта 2025, 01:55
Проект интересный, но ТЗ очень расплывчатое. По сравнению с шифровальщиком слишком мало объяснений как стоит организовать проект.
Алексей System Engineer
4 ноября 2024, 15:52
Хороший и очень интересный проект, всем советую к завершению)))
Денис
Уровень 68
30 марта 2025, 05:45
Спасибо, начинаю решать )
Олег
Уровень 106
Expert
30 августа 2024, 18:38
Это было круто) 4 бессонных ночи
Адам Backend Developer
31 августа 2024, 10:16
я догоняю тебяя
Алексей
Уровень 68
Expert
30 апреля 2024, 10:00
done 😌
Иван КорниенкоБэтмен в Готэме
27 апреля 2024, 17:50
jvatechsBackend Developer в Ищу стажировкуExpert
26 апреля 2023, 23:49
Если брать первую часть задания (ООП), то сделать все в циклах не особо сложно. А вот с многопоточкой немного придется поломать голову.
Николай
Уровень 70
Expert
23 апреля 2023, 12:17
сложнее, намного сложнее, чем первый проект
Pavel Palekhov
Уровень 55
Expert
11 августа 2022, 13:25
Бедные растения, сколько же у них хейтеров.... Еще и шанса не оставляют(((
Владислав
Уровень 108
Expert
16 июля 2022, 09:36
В начале модуля 2: Вы узнаете, зачем нужен Reflection API, аннотации в Java, а также напишете простой чат, используя сокеты. В конце модуля 2: Твоя задача — запрограммировать модель острова с изменяемыми параметрами, состоящую из массива локаций. Это так и задумано?