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:

  • Djurhierarki (OOP)
  • Djurens beteende
  • Multithreading
  • Statistik över öns tillstånd vid varje iteration (visas på konsolen)

Valfria delar av uppgiften:

  • Visa parametrarna på ett ställe så att det är lätt att hantera simuleringen
  • Grafik istället för konsolstatistik. Du kan använda antingen pseudografi i konsolen, eller JavaFX, Swing...
  • Lägg till andra faktorer som kan påverka simuleringen:
    • fler sorters djur
    • olika typer av växter
    • anpassat beteende för en grupp djur (till exempel jagar och rör sig vargar som en flock istället för separat)
    • markterräng, inklusive en flod som hindrar vissa djurs förflyttning

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