Modifications

- Ajoute correctement le nombre d'animaux
- Met à jour correctement les index libres lorsque l'on modifie un organisme
- Affichage constant et sans exception
This commit is contained in:
Mylloon 2022-04-02 16:03:20 +02:00
parent e419f323f9
commit 86ef204701
Signed by: Anri
GPG key ID: A82D63DFF8D1317F
2 changed files with 24 additions and 5 deletions

View file

@ -13,6 +13,7 @@ Univers::Univers(int m, int n): _m(m), _n(n), _tailleUnivers(m * n), _tour(0), _
std::random_device nombreAleatoire; std::random_device nombreAleatoire;
std::default_random_engine graine(nombreAleatoire()); std::default_random_engine graine(nombreAleatoire());
std::shuffle(indexLibres.begin(), indexLibres.end(), graine); std::shuffle(indexLibres.begin(), indexLibres.end(), graine);
//std::random_shuffle(indexLibres.begin(), indexLibres.end()); // random pas vraiment random pour les tests
// On en retire quelque un pour évité de saturé notre univers // On en retire quelque un pour évité de saturé notre univers
while(indexLibres.size() > (uint64_t)_tailleUnivers - _tailleUnivers / 4) while(indexLibres.size() > (uint64_t)_tailleUnivers - _tailleUnivers / 4)
@ -31,18 +32,36 @@ void Univers::ajoutAnimaux(std::vector<Animal*> animaux) {
while(!animaux.empty()) { while(!animaux.empty()) {
_plateau[indexLibres.back()] = animaux.back()->id(); // on place notre animal _plateau[indexLibres.back()] = animaux.back()->id(); // on place notre animal
animaux.pop_back(); // on retire l'animal du vecteur animaux.pop_back(); // on retire l'animal du vecteur
_nbAnimaux++; // incrémente le nombre d'animaux
indexLibres.pop_back(); // on retire l'index du vecteur indexLibres.pop_back(); // on retire l'index du vecteur
} }
} }
void Univers::ajoutOrganisme(Organisme * organisme, int index) { void Univers::modificationOrganisme(Organisme * organisme, int index) {
if(index > _tailleUnivers) if(index > _tailleUnivers)
throw std::range_error("Impossible de placer un organisme à l'index spécifié."); throw std::range_error("Impossible de placer un organisme à l'index spécifié.");
_plateau[index] = organisme->id(); // on place notre organisme _plateau[index] = organisme->id(); // on place notre organisme
std::cout << "indexLibres.size() -> " << indexLibres.size() << std::endl;
std::cout << "----------------------" << std::endl;
auto it = std::find(indexLibres.begin(), indexLibres.end(), index);
if(it == indexLibres.end()) { // si index non libre (pas présent dans le vecteur)
if(organisme->id() <= 0) // si c'est non vivant
indexLibres.push_back(index); // on le rajoute
} else { // si index libre (présent dans le vecteur)
if(organisme->id() > 0) { // si c'est vivant
_nbAnimaux++; // incrémente le nombre d'animaux
indexLibres.erase(it); // on le retire
}
}
std::cout << "indexLibres.size() -> " << indexLibres.size() << std::endl;
std::cout << "----------------------" << std::endl;
} }
void Univers::affichage(void) { void Univers::affichage(void) const noexcept {
for(int i = 0; i < _n * 5; i++) for(int i = 0; i < _n * 5; i++)
if(i == 0) if(i == 0)
std::cout << ""; std::cout << "";

View file

@ -24,12 +24,12 @@ class Univers {
// Ajoute des animaux à l'univers // Ajoute des animaux à l'univers
void ajoutAnimaux(std::vector<Animal*>); void ajoutAnimaux(std::vector<Animal*>);
/* Ajoute un organisme /* Modifie un organisme
* Attention, écrase l'organisme précédent */ * Attention, écrase l'organisme précédent */
void ajoutOrganisme(Organisme *, int); void modificationOrganisme(Organisme *, int);
// Affiche l'univers à l'instant présent // Affiche l'univers à l'instant présent
void affichage(void); void affichage(void) const noexcept;
// Vérifie s'il y a de la vie dans l'univers // Vérifie s'il y a de la vie dans l'univers
bool enVie(void) const noexcept; bool enVie(void) const noexcept;