fel
le

Szavanna 1 - az eleje

Szavanna szimulátor: egy NxN területen állatok élnek, ragadozók és növényevők. Egy cellában egyszerre csak egy állat áll. Minden állat tud

  • mozogni (szomszédos üres cellába)
  • szaporodni (adott feltételek mellett új állatka kerül szomszédos üres cellába)
  • öregedni (eltelt 1 év, öregségében kimúlik)
  • enni (éhen halni ha nem sikerül)

A szavannát kezdetben benépesítik az állatok. Adott paraméterek mellett a ragadozók vadásznak a növényevőkre (megeszik őket), és szaporodnak is. Bizonyos fokú vándorlás (mozgás) figyelhető meg. Kíváncsiak vagyunk rá, adott mennyiségű induló állat és szaporodási paraméterek mellett a szavanna 100 év múlva hogyan fog festeni? Kihalnak az állatok? Vagy mindent ellepnek a növényevők? Esetleg kialakul valamiféle egyensúly?

A szavanna aktuális állapotát ezért vizuálisan is megjelenítjük. Zöld N jelöli a növényevőt, piros R a ragadozókat.

1. ábra: Szavanna szimulátor

Mivel a növényevők és a ragadozók sokmindenben közösek, készítsünk egy közös kiinduló ős osztályt, samit csak lehet implementáljuk le ebben az Állat osztályban. Lesz ezen felül egy Szavanna osztály is, amely a szimulációs háttér területet adja, és vezérli a működést is.

Állat osztály: (absract funkciók ha szükséges)

  • eletkor: egész, az állat hány éves, nem lehet negatív, és nem lehet öregebb 1000 évesnél
  • maxeletkor: egész, maximális életkora ennek a példánynak, 1..1000 érték
  • ehes: egész, 0..100 érték, 0=nem éhes, egyéb számok azt mutatják hány körön keresztül nem tudott enni (2=2 kör óta éhezik)
  • elemeg: bool, életben van-e I/N
  • szavanna: a terület ahol az állatka éldegél ( a szimulációs terület példány )
  • fv öregedés(): eltelt egy év, növeli az életkort, és ha eléri a maxéletkort, akkor elpusztul (saját maga jelzi ezt az esetet)
  • fv szaporodik(): egy állatka (ragadozó vagy növényevő) szaporodik, ha
    • "van kedve": pl nem éhes, illetve az előző szaporodás óta eltelt kellő mennyiségű idő, ivarérett, egyéb feltételek, stb
    • "van kivel": van a szomszédos 1 sugarú környezetében másik fajtabéli állat
    • "van hova": van az 1 sugarú környezetében szabad cella, ahova az újszülött kerül
    • ha minden feltétel teljesül, akkor egy új példányt hoz létre, induláskor 0 éves, az új példányt elhelyezi maga mellé
  • fv eszik(): az állat eszik ha tud (ragadozó akkor tud, ha van a közelében zsákmányállat), különben éhezni kezd, és ha elér egy limitet, akkor éhen hal (az állat maga jelzi ezt az esetet)
  • fv mozog(): ha van a közelében szabad cella, akkor ezekből random választ egyet, és átmozdul oda, vándorol

Ragadozó osztály:

  • minden 3. évben szaporodik, és csak ha nem éhes (éhség 0)
  • 9-12 évig él (random)
  • 1 évet bír ki evés nélkül, ha az éhség eléri a 2-t, akkor éhen hal

Növényevő osztály:

  • minden 2. évben szaporodik
  • mindig tud enni (fű van elég)
  • 11-14 évig él

Cella segédosztály (rekord):

  • x egész, koordináta
  • y egész, koordináta
  • konstruktor a két paraméterrel

Szavanna osztály:

  • tartalmaz egy mátrixot a celláknak, kezdetben minden cella üres (null)
  • konstruktor a terület méretével
  • fv megkeres( allat ): visszatér az állat x,y koordinátájával ha az megtalálható a mátrixban, különben null
  • fv elpusztult( allat ): törli az állatot a mátrixból (cellája üres lesz)
  • fv mozgat( allat, ujCella) ): az adott állatot áthelyezi az adott x,y koordinátára
  • fv kornyezoAllatok( allat ): az adott állat körül (1 sugarú környezet) szereplő egyéb állatok listája
  • fv uresCellak( allat ): az adott állat körül (1 sugarú környezet) szereplő üres cellák (x,y koordináta pár) listája
  • fv elhelyez( allat, cella ): az adott állatot az adott cellába (x,y koordináta) elhelyezi ha lehetséges
  • fv kiiras(): kirajzolja a mátrix aktuális állapotát
  • fv egyEvTeljenEl(): a szimuláció vezérlése
    • választ egy random állatot, utasítja hogy (oregedjen, egyen, szaporodjon, mozogjon)
    • minden állatot sorra kerít, kivéve az ebben a ciklusban született új példányokat
    • semelyik állat nem marad ki, semelyik nem kerül sorra kétszer, az állatok közül véletlenszerűen választ

Főprogram:

  • pédányosít egy 20x20 szavannát
  • elhelyez rajta 200 db állatot, 65% eséllyel növényevőt, maradék ragadozó
  • 100 év szimulációt hajt végre, minden év végén kimerevíti az állapotot

Hernyák Zoltán
2013-04-30 17:53:10