Твоє завдання — запрограмувати модель острова зі змінними параметрами, що складається з масиву локацій (наприклад, 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…
  • Додай інші фактори, які можуть вплинути на симуляцію:
    • більше видів тварин
    • різні види рослин
    • кастомна поведінка для групи тварин (наприклад, вовки полюють і пересуваються не по одному, а в зграї)
    • рельєф на землі, зокрема річка, яка перешкоджає пересуванню деяких тварин

Про параметри (якщо вирішиш робити)

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

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

Юнікод (якщо вирішиш робити псевдографіку)

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

Проект перевіряється під час проходження його групою


Відео по виконанню

  1. Розбір завдання фінального проєкту
  2. Поради по реалізації проєкту
  3. Реалізація проєкту