Symulator wojny insektów

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

Cel projektu

Celem projektu było wykonanie w języku C++ 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

simulation_panel

Klasa ta stanowi graficzną reprezentację symulacji. 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. W celu przeprowadzenia wizualizacji skorzystano z biblioteki SFML.

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ę wskaźników do obiektów klasy colony.

colony

Klasa ta charakteryzuje kolonię, w której tworzone są kolejne grupy insektów. Posiada wskaźnik do obiektu wrogiej kolonii. Zawiera mapę wskaźników do obiektów klasy group.

group

Klasa ta charakteryzuje grupę insektów o pewnej charakterystycznej roli (np. grupa trutni). Zawiera wektor wskaźników do obiektów klasy insect.

insect

Ta abstrakcyjna klasa charakteryzuje insekta, zamieszkującego pewną grupę w pewnej kolonii w danym środowisku. Posiada wskaźniki 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 metody wirtualne:

Po klasie insect dziedziczą klasy abstrakcyjne: ant_insect, wasp_insect, dytiscidae_insect oraz thanasimus_insect. Implementują one metodę wirtualną moveTheInsect. Każdy gatunek porusza się w charakterystyczny dla siebie sposób:

Po klasie insect dziedziczą również klasy abstrakcyjne: queen_insect, drone_insect, soldier_insect oraz worker_insect. Implementują one metody wirtualne:

Instalacja zależności

sudo apt install cmake
sudo apt install libsfml-dev

Budowa symulatora

bash build_simulation.sh

Uruchomienie symulatora

bash run_simulation.sh