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:
Optionele onderdelen van de taak:
|
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: 🐃, 🐻, 🐎, 🦌, 🐗, 🐑, 🐐, 🐺, 🐍, 🦊, 🦅, 🐇, 🦆, 🐁, 🐛.
GO TO FULL VERSION