Ajout de l'ordre de passage des organismes à chaque tour dépendant de la vitesse de l'organisme
This commit is contained in:
parent
e5dd9cc89b
commit
3053a940cf
6 changed files with 66 additions and 11 deletions
|
@ -1,6 +1,8 @@
|
|||
#ifndef ECOSYSTEME_ANIMAL_HPP
|
||||
#define ECOSYSTEME_ANIMAL_HPP 1
|
||||
|
||||
#include <random>
|
||||
|
||||
#include "organisme.hpp"
|
||||
|
||||
/* Un animal possède une vitesse, plus il est rapide,
|
||||
|
@ -13,8 +15,6 @@
|
|||
|
||||
class Animal: public Organisme {
|
||||
protected:
|
||||
const int m_vitesse; // vitesse de l'organisme
|
||||
|
||||
const int m_age_max; // age maximale que peut atteindre l'organisme
|
||||
|
||||
const int m_faim_max; // faim maximal que peut atteindre l'animal avant de mourir
|
||||
|
@ -25,10 +25,12 @@ class Animal: public Organisme {
|
|||
|
||||
bool m_reproduire = true; // est-ce que l'animal peut se reproduire ?
|
||||
|
||||
// Renvoie une vitesse aléatoire
|
||||
// Renvoie une vitesse aléatoire (+ élevé = + rapide)
|
||||
virtual int generationVitesse(void) const noexcept = 0;
|
||||
|
||||
public:
|
||||
const int vitesse; // vitesse de l'organisme
|
||||
|
||||
// ID de l'univers, age max, faim max, vitesse
|
||||
Animal(int, int, int, int);
|
||||
|
||||
|
|
|
@ -20,6 +20,37 @@ struct Evenement {
|
|||
// Affiche un univers, possibilité d'afficher les
|
||||
// traits séparant les valeurs du tableaux (par défaut : non)
|
||||
static void affichage(Univers *, bool = false) noexcept;
|
||||
|
||||
private:
|
||||
struct comp {
|
||||
bool operator()(Organisme * organisme_a, Organisme * organisme_b) const {
|
||||
int vitesse_a, vitesse_b;
|
||||
|
||||
// Si l'organisme est un animal, on utilises sa vitesse pour
|
||||
// la comparaison, sinon on dit que la vitesse == - 1
|
||||
|
||||
if(Animal * animal_a = dynamic_cast<Animal *>(organisme_a)) {
|
||||
vitesse_a = animal_a->vitesse;
|
||||
} else {
|
||||
vitesse_a = -1;
|
||||
}
|
||||
if(Animal * animal_b = dynamic_cast<Animal *>(organisme_b)) {
|
||||
vitesse_b = animal_b->vitesse;
|
||||
} else {
|
||||
vitesse_b = -1;
|
||||
}
|
||||
|
||||
// Si les vitesses sont égales, alors c'est l'ID
|
||||
// (un peu comme la date de création / age) de l'organisme
|
||||
// qui décide car + l'ID est faible, + tôt l'organisme à été
|
||||
// créer, et on part du principe que + on est jeune + on est rapide
|
||||
|
||||
if(vitesse_a == vitesse_b) { // cas rare
|
||||
return organisme_a->ID > organisme_b->ID;
|
||||
}
|
||||
return vitesse_a > vitesse_b;
|
||||
}
|
||||
};
|
||||
};
|
||||
|
||||
#endif
|
||||
|
|
|
@ -1,16 +1,16 @@
|
|||
#include "../includes/animal.hpp"
|
||||
|
||||
Animal::Animal(const int univers_ID, const int index, const int age_max,
|
||||
const int faim_max, const int vitesse): Organisme(univers_ID, index),
|
||||
m_vitesse(vitesse),
|
||||
const int faim_max, const int p_vitesse): Organisme(univers_ID, index),
|
||||
m_age_max(age_max),
|
||||
m_faim_max(faim_max) { }
|
||||
m_faim_max(faim_max),
|
||||
vitesse(p_vitesse) { }
|
||||
|
||||
Animal::Animal(const int univers_ID, const int age_max,
|
||||
const int faim_max, const int vitesse): Organisme(univers_ID),
|
||||
m_vitesse(vitesse),
|
||||
const int faim_max, const int p_vitesse): Organisme(univers_ID),
|
||||
m_age_max(age_max),
|
||||
m_faim_max(faim_max) { }
|
||||
m_faim_max(faim_max),
|
||||
vitesse(p_vitesse) { }
|
||||
|
||||
Animal::~Animal(void) { }
|
||||
|
||||
|
|
|
@ -140,4 +140,18 @@ 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;
|
||||
|
||||
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());
|
||||
|
||||
for(auto it: univers->m_liste_univers[univers->ID].second) {
|
||||
if(Animal * c = dynamic_cast<Animal *>(it)) {
|
||||
std::cout << it->lettre(it->ID) << " (" << it->ID << ") : " << c->vitesse << std::endl;
|
||||
} else {
|
||||
std::cout << it->lettre(it->ID) << " (" << it->ID << ");" << std::endl;
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -11,7 +11,11 @@ Loup::Loup(const int univers_ID, const int index): Animal(univers_ID, index, 60,
|
|||
Loup::~Loup(void) { }
|
||||
|
||||
int Loup::generationVitesse(void) const noexcept {
|
||||
return 0;
|
||||
std::random_device nombre_aleatoire;
|
||||
std::default_random_engine graine(nombre_aleatoire());
|
||||
std::uniform_int_distribution<int> aleatoire(5, 20);
|
||||
|
||||
return aleatoire(graine);
|
||||
}
|
||||
|
||||
bool Loup::carnivore(void) const noexcept {
|
||||
|
|
|
@ -9,7 +9,11 @@ Mouton::Mouton(const int univers_ID, const int index): Animal(univers_ID, index,
|
|||
}
|
||||
|
||||
int Mouton::generationVitesse(void) const noexcept {
|
||||
return 0;
|
||||
std::random_device nombre_aleatoire;
|
||||
std::default_random_engine graine(nombre_aleatoire());
|
||||
std::uniform_int_distribution<int> aleatoire(0, 15);
|
||||
|
||||
return aleatoire(graine);
|
||||
}
|
||||
|
||||
bool Mouton::carnivore(void) const noexcept {
|
||||
|
|
Reference in a new issue