Adam Rajfer (adam.rajfer@gmail.com), 2017
Celem projektu było wykonanie w języku Java programu służącego do przeprowadzenia symulacji wojny czterech gatunków owadów:
Mrówki atakują osy, osy atakują pływaki, pływaki atakują przekraski, a przekraski atakują mrówki. Powstaje w ten sposób zamknięty łańcuch pokarmowy. Symulacja dobiega końca w dwóch przypadkach:
Każdy insekt charakteryzuje się również rolą społeczną:
SimulationFrame
Jest to najbardziej nadrzędna klasa programu. Dziedziczy po klasie JFrame i reprezentuje okno, w którym odbywa się symulacja.
SimulationPanel
Klasa ta dziedziczy po klasie JPanel. Odbywa się w niej, w kolejnych powtórzeniach pętli while, funkcja, odpowiadająca za kolejne kroki symulacji. Mrówki oznaczone są w oknie jako punkty w kolorze czerwonym, osy—niebieskim, pływaki—białym, a przekraski—zielonym. Ich pozycje aktualizowane są w kolejnych powtórzeniach pętli. Wyświetlana jest również liczność owadów każdego gatunku. Ponadto użytkownik może zmodyfikować niektóre parametry insektów oraz sprawdzić, jak wpłynie to na przebieg i wynik symulacji.
Simulation
Klasa ta odpowiada za przebieg jednej tury symulacji. Wykonywane są w niej kolejno po sobie funkcja szukania celu oraz działania insekta.
Environment
Klasa ta odpowiada za wszystkie czynności, jakie wykonywać może insekt. Charakteryzuje środowisko, w którym tworzone są kolejne kolonie insektów. Zawiera mapę referencji do obiektów klasy Colony
.
Colony
Klasa ta charakteryzuje kolonię, w której tworzone są kolejne grupy insektów. Zawiera mapę referencji do obiektów klasy Group
. Posiada również referencję do wrogiej kolonii.
Group
Klasa ta charakteryzuje grupę insektów o pewnej charakterystycznej roli (np. grupa trutni). Zawiera wektor referencji do obiektów klasy Insect
.
Insect
Ta abstrakcyjna klasa charakteryzuje insekta, zamieszkującego pewną grupę w pewnej kolonii w danym środowisku. Posiada referencję do swojej grupy, ale również do kolonii, która będzie w przyszłości kolonią docelową insekta. Zawiera również takie pola, jak punkty zdrowia, pozycja na mapie, promień ataku oraz promień ustawienia w szyku. Definiuje ją interfejs z metodami wirtualnymi:
moveTheInsect
(ruch insekta),actTheInsect
(działanie insekta),addGroupsToAct
(dodanie nazw grup docelowych insekta),setVirtualTargetColony
(ustawienie kolonii docelowej insekta).Po klasie Insect
dziedziczą klasy abstrakcyjne: AntInsect
, WaspInsect
, DytiscidaeInsect
oraz ThanasimusInsect
. Implementują one metodę wirtualną moveTheInsect
. Każdy gatunek porusza się w charakterystyczny dla siebie sposób:
Po wyżej wymienionych czterech klasach dziedziczą następnie klasy nieabstrakcyjne: QueenAntInsect
, DroneAntInsect
, SoldierAntInsect
, WorkerAntInsect
, QueenWaspInsect
, DroneWaspInsect
, SoldierWaspInsect
, WorkerWaspInsect
, QueenDytiscidaeInsect
, DroneDytiscidaeInsect
, SoldierDytiscidaeInsect
, WorkerDytiscidaeInsect
, QueenThanasimusInsect
, DroneThanasimusInsect
, SoldierThanasimusInsect
oraz WorkerThanasimusInsect
. Każdy z gatunków cechuje bowiem odpowiednia rola społeczna. Klasy te implementują metody wirtualne:
actTheInsect
,addGroupsToAct
,setVirtualTargetColony
.javac -d bin -sourcepath src src/main/StartSimulation.java
java -classpath bin main.StartSimulation
Po uruchomieniu programu użytkownik ma możliwość modyfikacji parametrów: attack (żołnierzy), cure (pracowników) oraz regeneration time (trutni).