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
|
#ifndef ECOSYSTEME_ANIMAL_HPP
|
||||||
#define ECOSYSTEME_ANIMAL_HPP 1
|
#define ECOSYSTEME_ANIMAL_HPP 1
|
||||||
|
|
||||||
|
#include <random>
|
||||||
|
|
||||||
#include "organisme.hpp"
|
#include "organisme.hpp"
|
||||||
|
|
||||||
/* Un animal possède une vitesse, plus il est rapide,
|
/* Un animal possède une vitesse, plus il est rapide,
|
||||||
|
@ -13,8 +15,6 @@
|
||||||
|
|
||||||
class Animal: public Organisme {
|
class Animal: public Organisme {
|
||||||
protected:
|
protected:
|
||||||
const int m_vitesse; // vitesse de l'organisme
|
|
||||||
|
|
||||||
const int m_age_max; // age maximale que peut atteindre 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
|
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 ?
|
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;
|
virtual int generationVitesse(void) const noexcept = 0;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
const int vitesse; // vitesse de l'organisme
|
||||||
|
|
||||||
// ID de l'univers, age max, faim max, vitesse
|
// ID de l'univers, age max, faim max, vitesse
|
||||||
Animal(int, int, int, int);
|
Animal(int, int, int, int);
|
||||||
|
|
||||||
|
|
|
@ -20,6 +20,37 @@ struct Evenement {
|
||||||
// Affiche un univers, possibilité d'afficher les
|
// Affiche un univers, possibilité d'afficher les
|
||||||
// traits séparant les valeurs du tableaux (par défaut : non)
|
// traits séparant les valeurs du tableaux (par défaut : non)
|
||||||
static void affichage(Univers *, bool = false) noexcept;
|
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
|
#endif
|
||||||
|
|
|
@ -1,16 +1,16 @@
|
||||||
#include "../includes/animal.hpp"
|
#include "../includes/animal.hpp"
|
||||||
|
|
||||||
Animal::Animal(const int univers_ID, const int index, const int age_max,
|
Animal::Animal(const int univers_ID, const int index, const int age_max,
|
||||||
const int faim_max, const int vitesse): Organisme(univers_ID, index),
|
const int faim_max, const int p_vitesse): Organisme(univers_ID, index),
|
||||||
m_vitesse(vitesse),
|
|
||||||
m_age_max(age_max),
|
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,
|
Animal::Animal(const int univers_ID, const int age_max,
|
||||||
const int faim_max, const int vitesse): Organisme(univers_ID),
|
const int faim_max, const int p_vitesse): Organisme(univers_ID),
|
||||||
m_vitesse(vitesse),
|
|
||||||
m_age_max(age_max),
|
m_age_max(age_max),
|
||||||
m_faim_max(faim_max) { }
|
m_faim_max(faim_max),
|
||||||
|
vitesse(p_vitesse) { }
|
||||||
|
|
||||||
Animal::~Animal(void) { }
|
Animal::~Animal(void) { }
|
||||||
|
|
||||||
|
|
|
@ -140,4 +140,18 @@ void Evenement::affichage(Univers * univers, const bool traits) noexcept {
|
||||||
|
|
||||||
void Evenement::lancerSimulation(Univers * univers) {
|
void Evenement::lancerSimulation(Univers * univers) {
|
||||||
std::cout << "Lancement de la simulation pour l'univers n°" << univers->ID << "..." << std::endl;
|
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) { }
|
Loup::~Loup(void) { }
|
||||||
|
|
||||||
int Loup::generationVitesse(void) const noexcept {
|
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 {
|
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 {
|
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 {
|
bool Mouton::carnivore(void) const noexcept {
|
||||||
|
|
Reference in a new issue