Din uppgift är att programmera en modell av en parametriserad ö som består av en rad platser (till exempel en 100x20-matris). Platserna kommer att befolkas med växter och djur. Djur kan:
- äta växter och/eller andra djur (om deras plats har lämplig mat),
- flytta (till närliggande platser),
- ras (om två av ett slag finns på en plats),
- dö av hunger eller bli uppäten.
OOP
När du skapar din värd av djur bör du använda OOP så mycket som möjligt: alla arter kommer från en abstrakt djurklass, som kommer att innehålla det beteende som är gemensamt för alla djur. Om specifika djur har specifika egenskaper när det gäller utfodring, reproduktion, förflyttning, etc., måste de åsidosätta metoderna i djurklassen.
Här är vad du behöver göra:
1. Skapa en klasshierarki:
-
Köttätare : Varg , Boa , Räv , Björn , Örn
-
Växtätare : Häst , rådjur , kanin , mus , get , får , vildsvin , buffel , anka , larv
-
Växter
Tabellen nedan visar hur sannolikt ett djur är att äta "mat" om det är på samma plats som den "maten". Låt oss titta på situationen där "en varg äter en kanin". Siffran i tabellen är 60. Det betyder att om en varg och en kanin befinner sig på samma plats är det 60 % chans att vargen äter upp kaninen. Du måste använda en flertrådad slumptalsgenerator .
Varg | Boa | Räv | Björn | Örn | Häst | Rådjur | Kanin | Mus | Get | Får | Vildsvin | Buffel | Anka | Caterpillar | Växter | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Varg | - | 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 |
Räv | 0 | 0 | - | 0 | 0 | 0 | 0 | 70 | 90 | 0 | 0 | 0 | 0 | 60 | 40 | 0 |
Björn | 0 | 80 | 0 | - | 0 | 40 | 80 | 80 | 90 | 70 | 70 | 50 | 20 | 10 | 0 | 0 |
Örn | 0 | 0 | 10 | 0 | - | 0 | 0 | 90 | 90 | 0 | 0 | 0 | 0 | 80 | 0 | 0 |
Häst | 0 | 0 | 0 | 0 | 0 | - | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 100 |
Rådjur | 0 | 0 | 0 | 0 | 0 | 0 | - | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 100 |
Kanin | 0 | 0 | 0 | 0 | 0 | 0 | 0 | - | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 100 |
Mus | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | - | 0 | 0 | 0 | 0 | 0 | 90 | 100 |
Get | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | - | 0 | 0 | 0 | 0 | 0 | 100 |
Får | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | - | 0 | 0 | 0 | 0 | 100 |
Vildsvin | 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 |
Anka | 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 |
Djurens egenskaper:
Vikt per djur, kg | Maximalt antal djur av denna art per plats | Maxhastighet (antal platser) per varv | Antal kilo mat som krävs för att djuret ska kunna utfodras fullt ut | |
---|---|---|---|---|
Varg | 50 | 30 | 3 | 8 |
Boa | 15 | 30 | 1 | 3 |
Räv | 8 | 30 | 2 | 2 |
Björn | 500 | 5 | 2 | 80 |
Örn | 6 | 20 | 3 | 1 |
Häst | 400 | 20 | 4 | 60 |
Rådjur | 300 | 20 | 4 | 50 |
Kanin | 2 | 150 | 2 | 0,45 |
Mus | 0,05 | 500 | 1 | 0,01 |
Get | 60 | 140 | 3 | 10 |
Får | 70 | 140 | 3 | 15 |
Vildsvin | 400 | 50 | 2 | 50 |
Buffel | 700 | 10 | 3 | 100 |
Anka | 1 | 200 | 4 | 0,15 |
Caterpillar | 0,01 | 1000 | 0 | 0 |
Växter | 1 | 200 | N/A | N/A |
2. Ett djur måste ha metoder för att äta , avla och välja en rörelseriktning .
3. Du kan implementera ätmetoden i klasserna växtätare och köttätare. Men var försiktig, växtätaren äter larver .
4. I specifika klasser som representerar en viss art kan du modifiera alla metoder för att passa djurets egenskaper.
5. Du måste skapa minst 10 växtätare och 5 köttätare (beskrivs i punkt 1).
Multithreading
Naturligtvis är det möjligt att skriva hela programmet på en tråd med enbart loopar. Men vi behöver öva på att arbeta med multithreading, så du måste använda trådar och trådpooler. En schemalagd pool för att köra återkommande uppgifter för växttillväxt och djuråtgärder, och en uppgift för att visa systemstatistik. Alternativt kan du visa statistiken i en uppgift med växterna eller djuren. Inuti djurhandlingsuppgiften kan du använda en annan trådpool - en vanlig sådan. Du bestämmer vilka uppgifter som ska tilldelas denna pool.
Obligatoriska delar av uppgiften:
Valfria delar av uppgiften:
|
Om inställningar (om du bestämmer dig för att lägga till dem)
För att göra det bekvämt att ändra de olika inställningarna när du startar programmet (öns storlek, maximalt tillåtna antal växter/djur på en plats, sannolikheten att en viss typ av djur kommer att flytta, antalet avkommor i olika arter, etc. .), måste du placera alla dessa inställningar någonstans, till exempel i en separat klass. Det bör vara möjligt att ändra följande inställningar:
- öns storlek
- varaktigheten av en klockcykel i simuleringen
- antalet djur av varje art i början av simuleringen
- villkor för att stoppa simuleringen (t.ex. alla djur har dött)
- antal avkommor för varje typ av djur
Unicode (om du bestämmer dig för att göra pseudografi)
Du kan använda Unicode-tecken för att avbilda djuren: 🐃, 🐻, 🐎, 🦌, 🐗, 🐑, 🐐, 🐺, 🐍,, 🦅, 🐇, 🦆, 🐁., .
GO TO FULL VERSION