Modifications
- Organisme se supprime de l'univers avant de se supprimer de la mémoire, depuis une méthode définie dans la classe mère - L'univers se vide en supprimant simplement les organismes qui compose le vecteur qui les répertorie
This commit is contained in:
parent
aef4dd852a
commit
b8e644e253
7 changed files with 35 additions and 20 deletions
|
@ -13,6 +13,8 @@ class Herbe: public Organisme {
|
||||||
// ID de l'univers
|
// ID de l'univers
|
||||||
Herbe(int);
|
Herbe(int);
|
||||||
|
|
||||||
|
~Herbe(void);
|
||||||
|
|
||||||
// Définit le comportement de l'herbe à chaque tour
|
// Définit le comportement de l'herbe à chaque tour
|
||||||
void action(void);
|
void action(void);
|
||||||
};
|
};
|
||||||
|
|
|
@ -18,6 +18,9 @@ class Organisme {
|
||||||
|
|
||||||
int m_index; // Location dans l'univers
|
int m_index; // Location dans l'univers
|
||||||
|
|
||||||
|
// Supprime l'organisme des vecteur (argument = type de l'organisme)
|
||||||
|
void suppresionVecteurs(bool = true);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
const int ID; // ID unique pour chaque organisme
|
const int ID; // ID unique pour chaque organisme
|
||||||
|
|
||||||
|
|
|
@ -15,7 +15,9 @@ Animal::Animal(const int univers_ID, const int age_max,
|
||||||
m_faim_max(faim_max),
|
m_faim_max(faim_max),
|
||||||
vitesse(p_vitesse) { }
|
vitesse(p_vitesse) { }
|
||||||
|
|
||||||
Animal::~Animal(void) { }
|
Animal::~Animal(void) {
|
||||||
|
suppresionVecteurs(false);
|
||||||
|
}
|
||||||
|
|
||||||
std::vector<int> Animal::casesPossible(void) const noexcept {
|
std::vector<int> Animal::casesPossible(void) const noexcept {
|
||||||
std::vector<int> vec;
|
std::vector<int> vec;
|
||||||
|
|
|
@ -8,4 +8,8 @@ Herbe::Herbe(const int univers_ID): Organisme(univers_ID) {
|
||||||
m_correspondance[ID] = _m_lettre;
|
m_correspondance[ID] = _m_lettre;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Herbe::~Herbe(void) {
|
||||||
|
suppresionVecteurs();
|
||||||
|
}
|
||||||
|
|
||||||
void Herbe::action(void) { /* ne fais rien */ }
|
void Herbe::action(void) { /* ne fais rien */ }
|
||||||
|
|
|
@ -45,16 +45,7 @@ Organisme::Organisme(const int univers_ID, const bool superposable, const int in
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Organisme::~Organisme(void) {
|
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);
|
|
||||||
}
|
|
||||||
|
|
||||||
char Organisme::lettre(const int id) noexcept {
|
char Organisme::lettre(const int id) noexcept {
|
||||||
if(m_correspondance[id]) {
|
if(m_correspondance[id]) {
|
||||||
|
@ -73,3 +64,23 @@ std::string Organisme::coordoneeeEchequier(void) {
|
||||||
char y = 'A' + position().second.first;
|
char y = 'A' + position().second.first;
|
||||||
return y + std::to_string(x);
|
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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -10,13 +10,7 @@ Sel::Sel(const int univers_ID): Organisme(univers_ID) {
|
||||||
}
|
}
|
||||||
|
|
||||||
Sel::~Sel(void) {
|
Sel::~Sel(void) {
|
||||||
// On se supprime du vecteur
|
suppresionVecteurs();
|
||||||
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 ajoute une herbe à la place
|
// On ajoute une herbe à la place
|
||||||
new Herbe(m_univers_ID, m_index);
|
new Herbe(m_univers_ID, m_index);
|
||||||
|
|
|
@ -29,8 +29,7 @@ Univers::Univers(const int longueur, const int largeur): m_longueur(longueur),
|
||||||
|
|
||||||
Univers::~Univers(void) {
|
Univers::~Univers(void) {
|
||||||
while(m_organismes_univers[ID].size()) { // Supprime les organismes présent dans l'univers
|
while(m_organismes_univers[ID].size()) { // Supprime les organismes présent dans l'univers
|
||||||
delete m_organismes_univers[ID].back();
|
delete m_organismes_univers[ID].back(); // l'organisme va se retirer tout seul du vecteur
|
||||||
m_organismes_univers[ID].pop_back();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Reference in a new issue