diff --git a/includes/herbe.hpp b/includes/herbe.hpp index 0ea273b..793262f 100644 --- a/includes/herbe.hpp +++ b/includes/herbe.hpp @@ -13,6 +13,8 @@ class Herbe: public Organisme { // ID de l'univers Herbe(int); + ~Herbe(void); + // Définit le comportement de l'herbe à chaque tour void action(void); }; diff --git a/includes/organisme.hpp b/includes/organisme.hpp index cdc3c1a..3f9e82a 100644 --- a/includes/organisme.hpp +++ b/includes/organisme.hpp @@ -18,6 +18,9 @@ class Organisme { int m_index; // Location dans l'univers + // Supprime l'organisme des vecteur (argument = type de l'organisme) + void suppresionVecteurs(bool = true); + public: const int ID; // ID unique pour chaque organisme diff --git a/src/animal.cpp b/src/animal.cpp index 7c70cd2..1c32530 100644 --- a/src/animal.cpp +++ b/src/animal.cpp @@ -15,7 +15,9 @@ Animal::Animal(const int univers_ID, const int age_max, m_faim_max(faim_max), vitesse(p_vitesse) { } -Animal::~Animal(void) { } +Animal::~Animal(void) { + suppresionVecteurs(false); +} std::vector Animal::casesPossible(void) const noexcept { std::vector vec; diff --git a/src/herbe.cpp b/src/herbe.cpp index bb4a8d7..2602098 100644 --- a/src/herbe.cpp +++ b/src/herbe.cpp @@ -8,4 +8,8 @@ Herbe::Herbe(const int univers_ID): Organisme(univers_ID) { m_correspondance[ID] = _m_lettre; } +Herbe::~Herbe(void) { + suppresionVecteurs(); +} + void Herbe::action(void) { /* ne fais rien */ } diff --git a/src/organisme.cpp b/src/organisme.cpp index e69cee4..cf02c64 100644 --- a/src/organisme.cpp +++ b/src/organisme.cpp @@ -45,16 +45,7 @@ Organisme::Organisme(const int univers_ID, const bool superposable, const int in } } -Organisme::~Organisme(void) { - // On remet notre index dans le vecteur des index vide - Univers::m_index_libres_univers[m_univers_ID].first.push_back(m_index); - // Attention: si l'organisme meurt après avoir été mangé, il faut bien faire - // attention que l'index libre soit véritablement libre et pas qu'il soit enfaite - // prit par l'assassin de notre organisme actuel - - // On remélange notre vecteur - Univers::melange(&Univers::m_index_libres_univers[m_univers_ID].first); -} +Organisme::~Organisme(void) { } char Organisme::lettre(const int id) noexcept { if(m_correspondance[id]) { @@ -73,3 +64,23 @@ std::string Organisme::coordoneeeEchequier(void) { char y = 'A' + position().second.first; return y + std::to_string(x); } + +void Organisme::suppresionVecteurs(bool type) { + // On se supprime du vecteur + auto debut = Univers::m_organismes_univers[m_univers_ID].begin(); + auto fin = Univers::m_organismes_univers[m_univers_ID].end(); + auto it = std::find(debut, fin, this); + if(it != fin) { + Univers::m_organismes_univers[m_univers_ID].erase(it); + } + + // On remet notre index dans le vecteur des index vide + // puis on remélange notre vecteur + if(type) { // vecteur différent en fonction du type + Univers::m_index_libres_univers[m_univers_ID].first.push_back(m_index); + Univers::melange(&Univers::m_index_libres_univers[m_univers_ID].first); + } else { + Univers::m_index_libres_univers[m_univers_ID].second.push_back(m_index); + Univers::melange(&Univers::m_index_libres_univers[m_univers_ID].second); + } +} diff --git a/src/sel.cpp b/src/sel.cpp index 3df9730..9cf71b8 100644 --- a/src/sel.cpp +++ b/src/sel.cpp @@ -10,13 +10,7 @@ Sel::Sel(const int univers_ID): Organisme(univers_ID) { } Sel::~Sel(void) { - // On se supprime du vecteur - auto debut = Univers::m_organismes_univers[m_univers_ID].begin(); - auto fin = Univers::m_organismes_univers[m_univers_ID].end(); - auto it = std::find(debut, fin, this); - if(it != fin) { - Univers::m_organismes_univers[m_univers_ID].erase(it); - } + suppresionVecteurs(); // On ajoute une herbe à la place new Herbe(m_univers_ID, m_index); diff --git a/src/univers.cpp b/src/univers.cpp index f89e380..58d007b 100644 --- a/src/univers.cpp +++ b/src/univers.cpp @@ -29,8 +29,7 @@ Univers::Univers(const int longueur, const int largeur): m_longueur(longueur), Univers::~Univers(void) { while(m_organismes_univers[ID].size()) { // Supprime les organismes présent dans l'univers - delete m_organismes_univers[ID].back(); - m_organismes_univers[ID].pop_back(); + delete m_organismes_univers[ID].back(); // l'organisme va se retirer tout seul du vecteur } }