Twoim zadaniem jest zaprogramowanie modelu wyspy o zmiennych parametrach, składającej się z tablicy lokalizacji (na przykład komórki 100x20). Lokacje będą wypełnione roślinnością i zwierzętami. Zwierzęta mogą:

  • jeść rośliny i/lub inne zwierzęta (jeśli ich lokalizacja ma odpowiednie pożywienie),
  • przenosić się (w sąsiednie miejsca),
  • rasa (jeśli w ich lokalizacji jest para),
  • umrzeć z głodu lub zostać zjedzonym.

OOP

Tworząc różnorodne zwierzęta, należy w jak największym stopniu korzystać z OOP: wszystkie gatunki będą pochodzić z jednej abstrakcyjnej klasy Animal, która będzie zawierała zachowania wspólne dla wszystkich zwierząt. Jeśli określone zwierzęta mają określone nawyki żywieniowe, reprodukcję, ruch itp., wówczas metody klasy Animal będą musiały zostać nadpisane dla nich.

Co powinno być zrobione:

1. Utwórz hierarchię klas:

  • Drapieżnik : wilk , boa dusiciel , lis , niedźwiedź , orzeł

  • Zwierzęta roślinożerne : koń , jeleń , królik , mysz , koza , owca , dzik , bawół , kaczka , gąsienica

  • Rośliny

Poniższa tabela pokazuje, jakie jest prawdopodobieństwo, że zwierzę zje „jedzenie”, jeśli znajduje się na tym samym kwadracie. Spójrzmy na sytuację „wilk zjada królika”. Liczba w tabeli to 60. Oznacza to, że wilk może zjeść królika, jeśli znajduje się na tym samym polu, z prawdopodobieństwem 60%. Musisz użyć wielowątkowego losowego pliku .

Wilk Boa Lis Niedźwiedź Orzeł Koń Jeleń Królik Mysz Koza Owce Dzik Bawół Kaczka Gąsienica Rośliny
Wilk - 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
Lis 0 0 - 0 0 0 0 70 90 0 0 0 0 60 40 0
Niedźwiedź 0 80 0 - 0 40 80 80 90 70 70 50 20 10 0 0
Orzeł 0 0 10 0 - 0 0 90 90 0 0 0 0 80 0 0
Koń 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 100
Jeleń 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 100
Królik 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 100
Mysz 0 0 0 0 0 0 0 0 - 0 0 0 0 0 90 100
Koza 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 100
Owce 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 100
Dzik 0 0 0 0 0 0 0 0 50 0 0 - 0 0 90 100
Bawół 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 100
Kaczka 0 0 0 0 0 0 0 0 0 0 0 0 0 - 90 100
Gąsienica 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 100

Charakterystyka zwierząt:

Waga jednego zwierzęcia, kg Maksymalna liczba zwierząt tego gatunku w jednej klatce Szybkość ruchu, nie więcej niż komórki na turę Ile kilogramów karmy potrzebuje zwierzę do pełnego nasycenia?
Wilk 50 trzydzieści 3 8
Boa 15 trzydzieści 1 3
Lis 8 trzydzieści 2 2
Niedźwiedź 500 5 2 80
Orzeł 6 20 3 1
Koń 400 20 4 60
Jeleń 300 20 4 50
Królik 2 150 2 0,45
Mysz 0,05 500 1 0,01
Koza 60 140 3 10
Owce 70 140 3 15
Dzik 400 50 2 50
Bawół 700 10 3 100
Kaczka 1 200 4 0,15
Gąsienica 0,01 1000 0 0
Rośliny 1 200 Nie dotyczy Nie dotyczy

2. Zwierzę musi mieć metody: jeść , rozmnażać , wybierać kierunek ruchu .

3. W klasach roślinożerców i drapieżników można zastosować metodę jedzenia . Ale uważaj, jest roślinożerna kaczka , która zjada gąsienicę .

4. W określonych klasach poszczególnych gatunków wszystkie metody mogą być modyfikowane w celu dopasowania do cech zwierzęcia.

5. Należy stworzyć minimum 10 gatunków roślinożerców i 5 gatunków drapieżników (opisanych w ust. 1).

Wielowątkowość

Oczywiście możliwe jest napisanie całego programu w jednym wątku przy użyciu samych pętli. Ale musimy praktycznie pracować z wielowątkowością, więc konieczne jest używanie wątków i pul wątków. Jedna zaplanowana pula — do uruchamiania zaplanowanego zadania wzrostu roślin, zadania cyklu życia zwierząt oraz zadania do wyświetlania statystyk w systemie. Alternatywnie możesz wyświetlić statystyki w jednym zadaniu z roślinami lub zwierzętami. Wewnątrz zadania cyklu życia zwierząt możesz użyć innej puli wątków - zwykłej. Jakie zadania przekazać tej puli do wykonania - zdecyduj sam.

Obowiązkowa część zadania:

  • Hierarchia zwierząt (HOP)
  • Zwierzęce zachowanie
  • Wielowątkowość
  • Statystyki stanu wyspy w każdym cyklu (do konsoli)

Opcjonalna część zadania:

  • Umieść parametry w jednym miejscu, aby wygodnie zarządzać „symulacją”
  • Grafika zamiast statystyk konsoli. Może to być albo pseudo-grafika w konsoli, albo JavaFX, Swing…
  • Dodaj inne czynniki, które mogą mieć wpływ na symulację:
    • więcej gatunków zwierząt
    • różne rodzaje roślin
    • niestandardowe zachowanie grupy zwierząt (np. wilki polują i poruszają się nie pojedynczo, ale w stadzie)
    • teren na ziemi, w tym rzeka, która utrudnia przemieszczanie się niektórych zwierząt

O parametrach (jeśli zdecydujesz się zrobić)

Aby ułatwić zmianę jego różnych parametrów podczas uruchamiania programu (rozmiar wyspy, maksymalna dopuszczalna liczba roślin / zwierząt w jednej klatce, prawdopodobieństwo przemieszczania się jednego lub drugiego rodzaju zwierząt, liczba potomstwa w różnych gatunki itp.), musisz umieścić wszystkie te parametry, gdzie coś, na przykład, w osobnej klasie. Powinna istnieć możliwość zmiany następujących parametrów:

  • rozmiar wyspy
  • czas trwania cyklu symulacji
  • liczbę zwierząt każdego gatunku na początku symulacji
  • warunek zatrzymania symulacji (np. wszystkie zwierzęta padły)
  • liczbę młodych dla każdego rodzaju zwierzęcia

Unicode (jeśli zdecydujesz się na pseudografikę)

Znaki Unicode mogą być używane do przedstawiania zwierząt: 🐃, 🐻, 🐎, 🦌, 🐗, 🐑, 🐐, 🐺, 🐍, 🦊, 🦅, 🐇, 🦆, 🐁, 🐛.