Вашата задача е да програмирате модел на параметризиран остров, състоящ се от масив от местоположения (например матрица 100x20). Местата ще бъдат населени с растения и животни. Животните могат:

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

ООП

Когато създавате своя набор от животни, трябва да използвате OOP колкото е възможно повече: всички видове ще произлизат от един абстрактен клас Animal, който ще съдържа поведението, което е общо за всички животни. Ако конкретни животни имат специфични характеристики по отношение на тяхното хранене, размножаване, движение и т.н., тогава те трябва да отменят методите на класа Animal.

Ето Howво трябва да направите:

1. Създайте йерархия на класове:

  • Месоядни животни : вълк , боа , лисица , мечка , орел

  • Тревопасни животни : кон , елен , заек , мишка , коза , овца , глиган , бивол , патица , гъсеница

  • растения

Таблицата по-долу показва Howва е вероятността едно животно да яде "храна", ако е на същото място като тази "храна". Нека да разгледаме ситуацията, когато "вълк яде заек". Числото в tableта е 60. Това означава, че ако вълк и заек са на едно и също място, има 60% шанс вълкът да изяде заека. Трябва да използвате многопоточен генератор на случайни числа .

Вълк Боа лисица Мечка орел Кон Елен Заек Мишка Коза овце Глиган Бъфало патица Caterpillar растения
Вълк - 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
Caterpillar 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 100

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

Tagло на животно, кг Максимален брой животни от този вид на място Максимална скорост (брой местоположения) на завой Брой килограми храна, необходими за пълноценно хранене на животното
Вълк 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
Caterpillar 0,01 1000 0 0
растения 1 200 N/A N/A

2. Животното трябва да има методи за хранене , размножаване и избор на посока за движение .

3. Можете да приложите метода на хранене в класовете тревопасни и месоядни животни. Но бъдете внимателни, тревопасната патица яде гъсеници .

4. В конкретни класове, представляващи определени видове, можете да модифицирате всички методи, за да отговарят на характеристиките на животното.

5. Трябва да създадете поне 10 вида тревопасни животни и 5 вида хищници (описани в точка 1).

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

Разбира се, възможно е да напишете цялата програма в една нишка, като използвате само цикли. Но се нуждаем от практика за работа с многопоточност, така че трябва да използвате нишки и пулове от нишки. Един планиран пул за изпълнение на повтарящи се задачи за растеж на растения и действия на животни и задача за показване на системна статистика. Като алтернатива можете да покажете статистиката в задача с растения or животни. Вътре в задачата за действие с животни можете да използвате друг набор от нишки - обикновен. Вие решавате кои задачи да възложите на този пул.

Задължителни части от задачата:

  • Йерархия на животните (OOP)
  • Поведение на животните
  • Многопоточност
  • Статистика за състоянието на острова при всяка итерация (показва се на конзолата)

Незадължителни части от задачата:

  • Показвайте параметрите на едно място, така че да е лесно да управлявате симулацията
  • Графика instead of конзолна статистика. Можете да използвате or псевдографика в конзолата, or JavaFX, Swing...
  • Добавете други фактори, които биха могли да повлияят на симулацията:
    • повече видове животни
    • различни видове растения
    • персонализирано поведение за група животни (например вълците ловуват и се движат като глутница, а не поотделно)
    • наземен терен, включително река, която пречи на движението на определени животни

Относно настройките (ако решите да ги добавите)

За да е удобно да променяте различните настройки при стартиране на програмата (размера на острова, максимално допустимия брой растения/животни на едно място, вероятността даден вид животно да се премести, броя на потомството при различните видове и др. .), трябва да поставите всички тези настройки някъде, например в отделен клас. Трябва да е възможно да промените следните настройки:

  • размер на острова
  • продължителност на тактовия цикъл в симулацията
  • броя на животните от всеки вид в началото на симулацията
  • condition за спиране на симулацията (напр. всички животни са умрели)
  • брой на потомството за всеки вид животно

Unicode (ако решите да правите псевдографика)

Можете да използвате Unicode символи, за да изобразите животните: 🐃, 🐻, 🐎, 🦌, 🐗, 🐑, 🐐, 🐺, 🐍, 🦊, 🦅, 🐇, 🦆, 🐁, 🐛.