Założenia wstępne

 

Tworzymy program symulujący życie w naturze. Automatycznie generowany jest prostokątny obszar parku natury podzielony na kolumny i wiersze "komórek".

  1. Obszar tworzony jest w sposób losowy, przy czym określona procentowo część obszaru to ocean i morza, a pozostała część to ląd.
  2. Na lądzie występują jeziora (losowo wybrana liczba), które łącznie zajmują określoną procentowo powierzchnię lądów.
  3. Lądy (poszczególne komórki parku) obsadzamy losowo roślinnością - rodzaje roślin są określone na diagramie Schemat Interfejsów, klas abstrakcyjnych i klas. Dla każdego rodzaju rośin jest określona początkowa łączna masa danej rośliny. Dla każdej komórki parku losowana jest lokalna masa danej rośliny. Rośliny mają określony cykl wzrostu. Jeśli zostaną zjedzone, będą potrzebowały określonego czasu na ponowny przyrost.
  4. Obszar parku zasiedlamy losowo zwierzętami - z każdego gatunku odpowiednio dobrana liczba osobników. Oczywiście w oceanie umieszczamy zwierzęta morskie, w jeziorach wzwierzęta słodkowodne, a na lądzie zwierzęta lądowe. Morskie ptaki umieszczamy na brzegu morza. Jeziorne ptaki na brzegach jezior. pozostałe ptaki na lądzie. Na lądzie umieszczamy wszystkie zwierzęta lądowe.
  5. Model każdego zwierzęcia jest realizowany (implementowany) przez określonego studenta. Jeden student implementuje model jednego zwierzęcia. Parametry każdego zwierzęcia określamy w oparciu o realne dane pobrane np. z wikipedii. Uwzględniamy następujące parametry:

    PARAMETRY ZWIERZĘCIA:

    1. private String name;

      private int animalId;

      private int weight;

      final float FOOD_QUANTITY_REQUIRED_PER_HOUR; //kg

      final int MAX_STARVING_HOURS_BEFORE_DEATH; //

      int hoursSinceLastMeal; //how many days have past after the last meal

      int energyPercent; // current energetic state - percent of full energy (after eating > 100)

      int maxEnergyPercent; // the ability to overeat

      final int STANDARD_SPEED;

      final int MAX_SPEED;

      final int MAX_STAMINA; // seconds

      final int AVERAGE_SCION_COUNT_IN_LITTER; //

      final int MAX_AGE; //days

      final int MIN_BREEDING_AGE; //days

      final int MAX_BREEDING_AGE; //days

      final int MAX_AGE_IN_NEST; // days - until this age the newborn must stay in the place of birth (nest)

      final int MIN_SELF_GOVERNMENT_AGE; //days when the animal becomes autonomous - does not need to be fed by parrents - before this ammount the newborn must be with parrent

      int age; //current age in days

      Gender gender; // Gender.MALE or Gender.FEMALE

      boolean isProliferating; // true if the animal is pregnant or incubating eggs

      boolean isFeedingNewborns; // true if the animal is feeding newborns

      Image animalImage; // plik PNG z ikoną zwierzęcia

      Photo aniamPhoto; //

       

  6. Jeden cykl życia w Parku to godzina zegarowa. W programie domyślnie ręcznie uruchamiamy każdy kolejny cykl (za pomocą przycisku klawiatury oraz/lub przycisku w GUI).
  7. Można też ustawić realizację wielu cykli - użytkownik może określić liczbę cykli, które mają zostać zrealizowane automatycznie, a następnie uruchomić realizację zadanej liczby cykli.
  8. W każdym cyklu rejestrowane są wszystkie zdarzenia w każdej komórce parku. W oparciu o zarejestrowane dane można odtworzyć cały cykl życia każdego zwierzęcia i związane z danym zwierzęciem zdarzenia.
  9. RUCH ZWIERZĄT W PARKU

    W każdym cyklu następuje losowanie kierunku przemieszczania się zwierzęcia. Zwierze nie może przekroczyć granicy parku. Zwierzęta poruszają się zgodnie ze swoją specyfikacją. Zwierze porusza się z określoną, charakterystyczną dla danego gatunku prędkością. Prędkość jest też uzależniona od wieku osobnika, stanu energetycznego itp. Czyli podczas jednego cyklu zwierzęta pokonują różną odległość. Gdy podczas pzremieszczania się zwierze jest głodne, a trafia na komórkę, w której spotyka jedzenie, wówczas:

    1. zatrzymuje się w tej komórce i zjada (tak jest w wypadku roślinożerców i padlinożerców). Jeśli się nasyci, wówczas odpoczywa lub wędruje dalej - zgodnie ze zwyczajem danego zwierzęcia. Jeśli nie nasyci się, wówczas wędruje dalej w poszukiwaniu jedzenia.
    2. jeśli zwierze jest drapieżnikiem, wówczas "wyczuwa" ofiarę, przy czym ofiara również "wyczuwa" zagrożenie i następuje pogoń lub walka. Pogoń kończy się sukcesem lub porażką w zależności od kilku czynników takich jak prędkość maksymalna danego osobnika - zależna także od wieku, jego stanu energetycznego, staminy, czynnika losowego (szczęścia ofiary) itp. Walka kończy się sukcesem dla drapieżnika lub porażką, gdy zaatakowany osobnik potrafi się obronić i ma wystarczającą masę (energię) i odpowiedni wiek (nie za młody i nie za stary). W wyniku przegranej walki drapieżnik atakujący traci mnóstwo energii.

    Uwzględniamy godziny snu zwierzęcia. Rozróżniamy zwierzęta nocne, dzienne i dzienno/nocne. Dla każdego gatunku zdefiniowane są godziny aktywności i snu. W godzinach snu zwierze pozostaje "w ukryciu".

  10. ROZMNAŻANIE I ŚMIERĆ NATURALNA

    Jeśli podczas wędrówki w jednym czasie w jednej komórce spotkają się dwa przedstawiciele jednego gatunku o odmiennej płci i w wieku rozrodczym, wówczas dochodzi do rozmnażania. Przy czym oznacza to początek procesu tworzenia losowo wybranej liczby nowych osobników gatunku (np. ciąży w wypadku ssaków) - oczywiście w ramach standardowej dla danego gatunku liczby potomków w pojedynczym miocie. Po okresie wstępnego "rozwoju młodych" samica rodzi lub składa jaja. Po określonym czasie z jaj wykluwają się młode, o ile jaja nie zostaną zjedzone. Młode są mocno narażone na ataki drapieżników, ale mogą być bronione przez rodziców. Młode osobniki pozostają przy rodzicach lub rozpoczynają autonomiczną wędrówkę (zgdonie ze standardami danego gatunku). Dla każdego gatunku jest określony przedział wieku reprodukcyjnego. Tylko osobniki w danym wieku mogą się rozmnażać. Osobnik danego gatunku umiera w naturalny sposób po upływie określonej liczby cykli (lat).

  11. ŚMIERĆ Z GŁODU

    Gdy zwierze wędrujące po obszarze parku nie znajduje wystarczającej ilości jedzenia, z czasem chudnie i opada z sił. Porusza się coraz wolniej. Po upływie określonego limitu czasu, jeśli nie natrafi na pożywienie, umiera z głodu. Wówczas pozostają po nim zwłoki, które są pożywieniem dla innych gatunków. Po określonym czasie upływa okres przydatności zwłok do spożycia. W przypadku młodych, które czekają na pokarm przyniesiony przez rodziców zdefiniowana jest ilość pokarmu potrzebna do życia w ciągu godziny. Jeśli rodzic nie pojawi się z pokarmem, wówczas po jakimś czasie młode giną z głodu. Zakładamy, że rodzic karmiący musi natomiast zdobywać więcej jedzenia niż jest potrzebne tylko jemu - musi dodatkowo zdobyć jedzenie dla potomstwa w gnieździe. Gdy zdobędzie pokarm dla potomstwa, wraca do gniazda najkrótszą drogą. Gdy wróci do gniazda, zdobyty nadmiar jedzenia automatycznie "przechodzi" na potomka w gnieździe.

  12. RAPORTY

    Interfejs użytkownika pozwala na wyświetlenie następujących raportów:

    1. raportu o życiu każdego osobnika,
    2. raportu o życiu wszystkich osobników danego gatunku (liczba osobników z upływem czasu),
    3. raportu zbiorczego o wszystkich gatunkach w parku,
    4. raportu o zdarzeniach w danej komórce,
  13. W symulacji pomijamy między innymi:
    • kwestie picia wody (w naszej symulacji zwierzęta nie piją),
    • zasięg działania zwierzęcia w określonej odległości od gniazda (zwierzęta poruszają się po całym obszarze parku),
    • okres godów (zakładamy okres godowy przez cały czas),
    • migracje okresowe, itp.
    • nie uwzględniamy siły ani kierunku wiatru w przypadku zwierząt latających (zakładamy warunki bezwietrzne).
    • rośliny regenerują się po upływie określonej liczby dni i staje się to w sposób dyskretny - po upływie określonej liczby dni nagle pojawia się pełna ilość roślin danego typu.
    • upływ czasu liczony jest wyłącznie w godzinach i dobach. Nie są uwzględniane pory roku.