Твоє завдання — запрограмувати модель острова зі змінними параметрами, що складається з масиву локацій (наприклад, 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 пул — для запуску за розкладом завдання росту рослин, завдання життєвого циклу тварин, та завдання виведення статистики по системі. Як варіант, можна виводити статистику в одному завданні з рослинами чи тваринами. Всередині завдання життєвого циклу тварин можна використовувати ще один пул потоків — звичайний. Які задачі віддавати на виконання цьому пулу — вирішуй самостійно.
Обов'язкова частина завдання:
Опціональна частина завдання:
|
Про параметри (якщо вирішиш робити)
Для того, щоб під час запуску програми було зручно змінювати її різноманітні параметри (розмір острова, максимально допустима кількість рослин/тварин в одній клітинці, вірогідність пересування певного виду тварин, кількість приплоду в різних видів тощо), потрібно кудись винести всі ці параметри, наприклад, до окремого класу. Повинна бути можливість змінювати такі параметри:
- розмір острову
- тривалість такту симуляції
- кількість тварин кожного виду на старті симуляції
- умова зупинки симуляції (наприклад, померли всі тварини)
- кількість дитинчат у кожного виду тварин
Юнікод (якщо вирішиш робити псевдографіку)
Для відображення тварин можна використовувати юнікод символи: 🐃, 🐻, 🐎, 🦌, 🐗, 🐑, 🐐, 🐺, 🐍, 🦊, 🦅, 🐇, 🦆, 🐁, 🐛.
Проект перевіряється під час проходження його групою
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ