Вашата задача е да програмирате модел на параметризиран остров, състоящ се от масив от местоположения (например матрица 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 животни. Вътре в задачата за действие с животни можете да използвате друг набор от нишки - обикновен. Вие решавате кои задачи да възложите на този пул.
Задължителни части от задачата:
Незадължителни части от задачата:
|
Относно настройките (ако решите да ги добавите)
За да е удобно да променяте различните настройки при стартиране на програмата (размера на острова, максимално допустимия брой растения/животни на едно място, вероятността даден вид животно да се премести, броя на потомството при различните видове и др. .), трябва да поставите всички тези настройки някъде, например в отделен клас. Трябва да е възможно да промените следните настройки:
- размер на острова
- продължителност на тактовия цикъл в симулацията
- броя на животните от всеки вид в началото на симулацията
- condition за спиране на симулацията (напр. всички животни са умрели)
- брой на потомството за всеки вид животно
Unicode (ако решите да правите псевдографика)
Можете да използвате Unicode символи, за да изобразите животните: 🐃, 🐻, 🐎, 🦌, 🐗, 🐑, 🐐, 🐺, 🐍, 🦊, 🦅, 🐇, 🦆, 🐁, 🐛.
GO TO FULL VERSION