Sarcina dvs. este să programați un model al unei insule parametrizate constând dintr-o serie de locații (de exemplu, o matrice de 100x20). Locațiile vor fi populate cu plante și animale. Animalele pot:
- mâncați plante și/sau alte animale (dacă locația lor are hrană adecvată),
- mutarea (în locații învecinate),
- rasă (dacă există două de același fel într-o locație),
- mor de foame sau fi mâncat.
OOP
Când vă creați gazda de animale, ar trebui să utilizați OOP cât mai mult posibil: toate speciile vor deriva dintr-o clasă abstractă de animale, care va conține comportamentul care este comun tuturor animalelor. Dacă anumite animale au caracteristici specifice în ceea ce privește hrănirea, reproducerea, mișcarea, etc., atunci trebuie să depășească metodele clasei Animal.
Iată ce trebuie să faci:
1. Creați o ierarhie de clase:
-
Carnivore : lup , boa , vulpe , urs , vultur
-
Ierbivore : cal , căprioară , iepure , șoarece , capră , oaie , mistreț , bivol , rață , omidă
-
Plante

Tabelul de mai jos arată cât de probabil este un animal să mănânce „hrană” dacă se află în aceeași locație cu acea „hrană”. Să ne uităm la situația în care „un lup mănâncă un iepure”. Numărul din tabel este 60. Aceasta înseamnă că dacă un lup și un iepure sunt în aceeași locație, există o șansă de 60% ca lupul să mănânce iepurele. Trebuie să utilizați un generator de numere aleatoare cu mai multe fire .
Lup | Boa | Vulpe | Urs | Vultur | Cal | Cerb | Iepure | Mouse | Capră | Oaie | Vier | Bivol | Rață | Omida | Plante | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Lup | - | 0 | 0 | 0 | 0 | 10 | 15 | 60 | 80 | 60 | 70 | 15 | 10 | 40 | 0 | 0 |
Boa | 0 | - | 15 | 0 | 0 | 0 | 0 | 20 | 40 | 0 | 0 | 0 | 0 | 10 | 0 | 0 |
Vulpe | 0 | 0 | - | 0 | 0 | 0 | 0 | 70 | 90 | 0 | 0 | 0 | 0 | 60 | 40 | 0 |
Urs | 0 | 80 | 0 | - | 0 | 40 | 80 | 80 | 90 | 70 | 70 | 50 | 20 | 10 | 0 | 0 |
Vultur | 0 | 0 | 10 | 0 | - | 0 | 0 | 90 | 90 | 0 | 0 | 0 | 0 | 80 | 0 | 0 |
Cal | 0 | 0 | 0 | 0 | 0 | - | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 100 |
Cerb | 0 | 0 | 0 | 0 | 0 | 0 | - | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 100 |
Iepure | 0 | 0 | 0 | 0 | 0 | 0 | 0 | - | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 100 |
Mouse | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | - | 0 | 0 | 0 | 0 | 0 | 90 | 100 |
Capră | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | - | 0 | 0 | 0 | 0 | 0 | 100 |
Oaie | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | - | 0 | 0 | 0 | 0 | 100 |
Vier | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 50 | 0 | 0 | - | 0 | 0 | 90 | 100 |
Bivol | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | - | 0 | 0 | 100 |
Rață | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | - | 90 | 100 |
Omida | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | - | 100 |
Caracteristicile animalelor:
Greutate per animal, kg | Numărul maxim de animale din această specie pe locație | Viteza maximă (număr de locații) pe tură | Numărul de kilograme de hrană necesare pentru hrănirea completă a animalului | |
---|---|---|---|---|
Lup | 50 | 30 | 3 | 8 |
Boa | 15 | 30 | 1 | 3 |
Vulpe | 8 | 30 | 2 | 2 |
Urs | 500 | 5 | 2 | 80 |
Vultur | 6 | 20 | 3 | 1 |
Cal | 400 | 20 | 4 | 60 |
Cerb | 300 | 20 | 4 | 50 |
Iepure | 2 | 150 | 2 | 0,45 |
Mouse | 0,05 | 500 | 1 | 0,01 |
Capră | 60 | 140 | 3 | 10 |
Oaie | 70 | 140 | 3 | 15 |
Vier | 400 | 50 | 2 | 50 |
Bivol | 700 | 10 | 3 | 100 |
Rață | 1 | 200 | 4 | 0,15 |
Omida | 0,01 | 1000 | 0 | 0 |
Plante | 1 | 200 | N / A | N / A |
2. Un animal trebuie să aibă metode de a mânca , de a reproduce și de a alege direcția de mișcare .
3. Puteți implementa metoda eat în clasele de erbivore și carnivore. Dar ai grijă, rața erbivoră mănâncă omizi .
4. În clasele specifice care reprezintă anumite specii, puteți modifica toate metodele pentru a se potrivi cu caracteristicile animalului.
5. Trebuie să creați cel puțin 10 specii de ierbivore și 5 specii de carnivore (descrise la punctul 1).
Multithreading
Desigur, este posibil să scrieți întregul program pe un fir folosind numai bucle. Dar avem nevoie de exersare în lucrul cu multithreading, așa că trebuie să utilizați fire și pool-uri de fire. Un grup programat pentru a rula sarcini recurente pentru creșterea plantelor și acțiunile animalelor și o sarcină pentru afișarea statisticilor sistemului. Alternativ, puteți afișa statisticile într-o sarcină cu plantele sau animalele. În cadrul sarcinii de acțiune cu animale, puteți utiliza un alt grup de fire - unul obișnuit. Tu decideți ce sarcini să atribuiți acestui grup.
Părți obligatorii ale sarcinii:
Părți opționale ale sarcinii:
|
Despre setări (dacă decideți să le adăugați)
Pentru a facilita modificarea diferitelor setări la pornirea programului (dimensiunea insulei, numărul maxim admis de plante/animale într-o locație, probabilitatea ca un anumit tip de animal să se miște, numărul de descendenți din diferite specii etc. .), trebuie să puneți toate aceste setări undeva, de exemplu, într-o clasă separată. Ar trebui să fie posibilă modificarea următoarelor setări:
- dimensiunea insulei
- durata unui ciclu de ceas în simulare
- numărul de animale din fiecare specie la începutul simulării
- condiție pentru oprirea simulării (de exemplu, toate animalele au murit)
- numărul de descendenți pentru fiecare tip de animal
Unicode (dacă decideți să faceți pseudografice)
Puteți utiliza caractere Unicode pentru a reprezenta animalele: 🐃, 🐻, 🐎, 🦌, 🐗, 🐑, 🐐, 🐺, 🐍, 🦊, 🦅, 🐇, 🦆, 🐇, 🦆, 🐛.
GO TO FULL VERSION