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:
Opcjonalna część zadania:
|
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: 🐃, 🐻, 🐎, 🦌, 🐗, 🐑, 🐐, 🐺, 🐍, 🦊, 🦅, 🐇, 🦆, 🐁, 🐛.
GO TO FULL VERSION