Adam Rajfer (adam.rajfer@gmail.com), 2017
Celem projektu było wykonanie w języku C++ 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ą:
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:
moveTheInsect
(ruch insekta),actTheInsect
(działanie insekta),addGroupsToAct
(dodanie nazw grup docelowych insekta),setVirtualTargetColony
(ustawienie kolonii docelowej insekta).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:
actTheInsect
,addGroupsToAct
,setVirtualTargetColony
.sudo apt install cmake
sudo apt install libsfml-dev
bash build_simulation.sh
bash run_simulation.sh