Symulator wojny insektów

Adam Rajfer (adam.rajfer@gmail.com), 2017

Cel projektu

Celem projektu było wykonanie w języku Java programu służącego do przeprowadzenia symulacji wojny czterech gatunków owadów:

Opis programu

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ą:

Implementacja

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:

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:

Budowa symulatora

javac -d bin -sourcepath src src/main/StartSimulation.java

Uruchomienie symulatora

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).