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:

  • Ierarhia animalelor (OOP)
  • Comportamentul animalului
  • Multithreading
  • Statistici despre starea insulei la fiecare iterație (afișată pe consolă)

Părți opționale ale sarcinii:

  • Afișați parametrii într-un singur loc, astfel încât să fie ușor de gestionat simularea
  • Grafică în loc de statistici de consolă. Puteți folosi fie pseudografice în consolă, fie JavaFX, Swing...
  • Adăugați alți factori care ar putea afecta simularea:
    • mai multe tipuri de animale
    • diferite tipuri de plante
    • comportament personalizat pentru un grup de animale (de exemplu, lupii vânează și se mișcă ca o haită și nu separat)
    • teren sol, inclusiv un râu care împiedică mișcarea anumitor animale

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: 🐃, 🐻, 🐎, 🦌, 🐗, 🐑, 🐐, 🐺, 🐍, 🦊, 🦅, 🐇, 🦆, 🐇, 🦆, 🐛.