Het is jouw taak om een ​​model te programmeren van een geparametriseerd eiland dat bestaat uit een reeks locaties (bijvoorbeeld een matrix van 100x20). De locaties worden bevolkt met planten en dieren. Dieren kunnen:

  • eet planten en/of andere dieren (mits op hun standplaats geschikt voedsel aanwezig is),
  • verhuizen (naar naburige locaties),
  • ras (als er twee soorten op een locatie bestaan),
  • sterven van de honger of worden opgegeten.

OOP

Bij het maken van je gastheer van dieren, moet je zoveel mogelijk OOP gebruiken: alle soorten zullen voortkomen uit één abstracte Animal-klasse, die het gedrag zal bevatten dat alle dieren gemeenschappelijk hebben. Als specifieke dieren specifieke kenmerken hebben met betrekking tot hun voeding, voortplanting, beweging, etc., dan moeten ze de methoden van de Animal-klasse overschrijven.

Dit is wat u moet doen:

1. Maak een klassenhiërarchie:

  • Carnivoren : Wolf , Boa , Vos , Beer , Adelaar

  • Herbivoren : Paard , Hert , Konijn , Muis , Geit , Schaap , Zwijn , Buffel , Eend , Rups

  • Planten

De onderstaande tabel laat zien hoe waarschijnlijk het is dat een dier "voedsel" eet als het zich op dezelfde locatie bevindt als dat "voedsel". Laten we eens kijken naar de situatie waarin "een wolf een konijn eet". Het getal in de tabel is 60. Dit betekent dat als een wolf en een konijn zich op dezelfde locatie bevinden, er 60% kans is dat de wolf het konijn opeet. U moet een multithreaded random number generator gebruiken .

Wolf Boa Vos Beer Adelaar Paard Hert Konijn Muis Geit Schaap Zwijn Buffel Eend Rups Planten
Wolf - 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
Vos 0 0 - 0 0 0 0 70 90 0 0 0 0 60 40 0
Beer 0 80 0 - 0 40 80 80 90 70 70 50 20 10 0 0
Adelaar 0 0 10 0 - 0 0 90 90 0 0 0 0 80 0 0
Paard 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 100
Hert 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 100
Konijn 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 100
Muis 0 0 0 0 0 0 0 0 - 0 0 0 0 0 90 100
Geit 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 100
Schaap 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 100
Zwijn 0 0 0 0 0 0 0 0 50 0 0 - 0 0 90 100
Buffel 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 100
Eend 0 0 0 0 0 0 0 0 0 0 0 0 0 - 90 100
Rups 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 100

Dierlijke kenmerken:

Gewicht per dier, kg Maximaal aantal dieren van deze soort per locatie Maximale snelheid (aantal locaties) per beurt Aantal kilo voer dat nodig is om het dier volledig te voeden
Wolf 50 30 3 8
Boa 15 30 1 3
Vos 8 30 2 2
Beer 500 5 2 80
Adelaar 6 20 3 1
Paard 400 20 4 60
Hert 300 20 4 50
Konijn 2 150 2 0,45
Muis 0,05 500 1 0.01
Geit 60 140 3 10
Schaap 70 140 3 15
Zwijn 400 50 2 50
Buffel 700 10 3 100
Eend 1 200 4 0,15
Rups 0.01 1000 0 0
Planten 1 200 NVT NVT

2. Een dier moet methoden hebben om te eten , te fokken en een bewegingsrichting te kiezen .

3. Je kunt de eat- methode toepassen in de lessen herbivoren en carnivoren. Maar pas op, de plantenetende eend eet rupsen .

4. In specifieke klassen die bepaalde soorten vertegenwoordigen, kunt u alle methoden aanpassen aan de kenmerken van het dier.

5. Je moet minimaal 10 herbivoorsoorten en 5 carnivoorsoorten maken (beschreven in punt 1).

Multithreading

Het is natuurlijk mogelijk om het hele programma op één thread te schrijven met alleen lussen. Maar we moeten oefenen met multithreading, dus je moet threads en threadpools gebruiken. Eén geplande pool om terugkerende taken voor plantengroei en dieracties uit te voeren, en een taak om systeemstatistieken weer te geven. Als alternatief kunt u de statistieken weergeven in een taak met de planten of dieren. Binnen de Animal Action-taak kun je een andere thread-pool gebruiken - een gewone. U bepaalt zelf welke taken u toewijst aan deze pool.

Verplichte onderdelen van de taak:

  • Dierlijke hiërarchie (OOP)
  • Dierengedrag
  • Multithreading
  • Statistieken over de staat van het eiland bij elke iteratie (weergegeven op de console)

Optionele onderdelen van de taak:

  • Geef de parameters op één plek weer, zodat het gemakkelijk is om de simulatie te beheren
  • Afbeeldingen in plaats van consolestatistieken. U kunt pseudographics gebruiken in de console, of JavaFX, Swing...
  • Voeg andere factoren toe die de simulatie kunnen beïnvloeden:
    • meer soorten dieren
    • verschillende soorten planten
    • aangepast gedrag voor een groep dieren (wolven jagen en verplaatsen zich bijvoorbeeld als een roedel in plaats van afzonderlijk)
    • grondterrein, inclusief een rivier die de beweging van bepaalde dieren belemmert

Over instellingen (als u besluit deze toe te voegen)

Om het gemakkelijk te maken om bij het starten van het programma de verschillende instellingen te wijzigen (de eilandgrootte, het maximaal toegestane aantal planten/dieren op één locatie, de kans dat een bepaalde diersoort zich verplaatst, het aantal nakomelingen van verschillende soorten, enz. .), moet je al deze instellingen bijvoorbeeld ergens in een aparte klasse zetten. Het zou mogelijk moeten zijn om de volgende instellingen te wijzigen:

  • eiland grootte
  • duur van een klokcyclus in de simulatie
  • het aantal dieren van elke soort aan het begin van de simulatie
  • voorwaarde voor het stoppen van de simulatie (bijv. alle dieren zijn gestorven)
  • aantal nakomelingen per diersoort

Unicode (als u besluit om pseudographics te doen)

U kunt Unicode-tekens gebruiken om de dieren weer te geven: 🐃, 🐻, 🐎, 🦌, 🐗, 🐑, 🐐, 🐺, 🐍, 🦊, 🦅, 🐇, 🦆, 🐁, 🐛.