Ajouts et modifications

- Supprime la méthode animal (remplacé par dynamic_cast)
- Ajoute la métode action() qui définit le comportement de chaque organisme
- Lance l'action de chaque organisme à chaque tour
This commit is contained in:
Mylloon 2022-04-10 15:35:25 +02:00
parent 7ef27412ad
commit 2205f3b15e
Signed by: Anri
GPG key ID: A82D63DFF8D1317F
13 changed files with 29 additions and 20 deletions

View file

@ -39,9 +39,6 @@ class Animal: public Organisme {
virtual ~Animal(void);
// Renvoie vrai
bool animal(void) const noexcept;
// Animal carnivore ?
virtual bool carnivore(void) const noexcept = 0;
};

View file

@ -13,8 +13,8 @@ class Herbe: public Organisme {
// ID de l'univers
Herbe(int);
// Renvoie faux
bool animal(void) const noexcept;
// Définit le comportement de l'herbe
void action(void);
};
#endif

View file

@ -20,6 +20,9 @@ class Loup: public Animal {
// Renvoie vrai
bool carnivore(void) const noexcept;
// Définit le comportement du loup
void action(void);
};
#endif

View file

@ -18,6 +18,9 @@ class Mouton: public Animal {
// Renvoie faux
bool carnivore(void) const noexcept;
// Définit le comportement du mouton
void action(void);
};
#endif

View file

@ -34,8 +34,8 @@ class Organisme {
// Renvoie la lettre correspondant à l'ID
static char lettre(int) noexcept;
// Renvoie vrai si l'organisme est un animal
virtual bool animal(void) const noexcept = 0;
// Définit le comportement de l'organisme
virtual void action(void) = 0;
// Renvoie les positions exact de l'organisme dans l'univers
std::pair<int, std::pair<int, int>> position(int) const noexcept;

View file

@ -13,8 +13,8 @@ class Sel: public Organisme {
// ID de l'univers
Sel(int);
// Renvoie faux
bool animal(void) const noexcept;
// Définit le comportement du sel
void action(void);
};
#endif

View file

@ -13,7 +13,3 @@ Animal::Animal(const int univers_ID, const int age_max,
vitesse(p_vitesse) { }
Animal::~Animal(void) { }
bool Animal::animal(void) const noexcept {
return true;
}

View file

@ -147,10 +147,20 @@ void Evenement::affichage(Univers * univers, const bool traits) noexcept {
void Evenement::lancerSimulation(Univers * univers) {
std::cout << "Lancement de la simulation pour l'univers n°" << univers->ID << "..." << std::endl;
// A chaque tour de l'univers, on trie les organismes en fonction de leur vitesse
// pour déterminer l'ordre des actions, puis chaque organisme fait une action
// A la fin de chaque tour, on incrémente de 1 le nombre de tours
while(univers->enVie()) {
// On trie les organismes en fonction de leur vitesse
std::sort(univers->m_liste_univers[univers->ID].second.begin(), univers->m_liste_univers[univers->ID].second.end(), comp_organisme());
// Pour tout les organismes de notre univers
for(auto it: univers->m_liste_univers[univers->ID].second) {
it->action(); // Fais ce qu'il a à faire pendant son tour
}
// Incrémente le nombre de tours
++univers->m_tour;
break;
}

View file

@ -8,6 +8,4 @@ Herbe::Herbe(const int univers_ID): Organisme(univers_ID) {
m_correspondance[ID] = _m_lettre;
}
bool Herbe::animal(void) const noexcept {
return false;
}
void Herbe::action(void) { }

View file

@ -21,3 +21,5 @@ int Loup::generationVitesse(void) const noexcept {
bool Loup::carnivore(void) const noexcept {
return true;
}
void Loup::action(void) { }

View file

@ -19,3 +19,5 @@ int Mouton::generationVitesse(void) const noexcept {
bool Mouton::carnivore(void) const noexcept {
return false;
}
void Mouton::action(void) { }

View file

@ -8,6 +8,4 @@ Sel::Sel(const int univers_ID): Organisme(univers_ID) {
m_correspondance[ID] = _m_lettre;
}
bool Sel::animal(void) const noexcept {
return false;
}
void Sel::action(void) { }

View file

@ -39,7 +39,7 @@ void Univers::melange(std::vector<int> * vecteur) {
bool Univers::enVie(void) const noexcept {
for(auto organisme: m_liste_univers[ID].second) { // on parcours les organismes de notre univers
if(organisme->animal()) { // si on a un animal
if(dynamic_cast<Animal *>(organisme)) { // si c'est un animal
return true; // renvoie true
}
}