From b8e644e2535c9d1665811f39c76c0e483448a06c Mon Sep 17 00:00:00 2001 From: Mylloon Date: Tue, 12 Apr 2022 01:41:47 +0200 Subject: [PATCH] =?UTF-8?q?Modifications=20-=20Organisme=20se=20supprime?= =?UTF-8?q?=20de=20l'univers=20avant=20de=20se=20supprimer=20de=20la=20m?= =?UTF-8?q?=C3=A9moire,=20depuis=20une=20m=C3=A9thode=20d=C3=A9finie=20dan?= =?UTF-8?q?s=20la=20classe=20m=C3=A8re=20-=20L'univers=20se=20vide=20en=20?= =?UTF-8?q?supprimant=20simplement=20les=20organismes=20qui=20compose=20le?= =?UTF-8?q?=20vecteur=20qui=20les=20r=C3=A9pertorie?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- includes/herbe.hpp | 2 ++ includes/organisme.hpp | 3 +++ src/animal.cpp | 4 +++- src/herbe.cpp | 4 ++++ src/organisme.cpp | 31 +++++++++++++++++++++---------- src/sel.cpp | 8 +------- src/univers.cpp | 3 +-- 7 files changed, 35 insertions(+), 20 deletions(-) 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 } }