From 86ef20470156ab49d91d4e3d092aeaf2a46f8de9 Mon Sep 17 00:00:00 2001 From: Mylloon Date: Sat, 2 Apr 2022 16:03:20 +0200 Subject: [PATCH] =?UTF-8?q?Modifications=20-=20Ajoute=20correctement=20le?= =?UTF-8?q?=20nombre=20d'animaux=20-=20Met=20=C3=A0=20jour=20correctement?= =?UTF-8?q?=20les=20index=20libres=20lorsque=20l'on=20modifie=20un=20organ?= =?UTF-8?q?isme=20-=20Affichage=20constant=20et=20sans=20exception?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- univers.cpp | 23 +++++++++++++++++++++-- univers.hpp | 6 +++--- 2 files changed, 24 insertions(+), 5 deletions(-) diff --git a/univers.cpp b/univers.cpp index 22c1d83..f18b830 100644 --- a/univers.cpp +++ b/univers.cpp @@ -13,6 +13,7 @@ Univers::Univers(int m, int n): _m(m), _n(n), _tailleUnivers(m * n), _tour(0), _ std::random_device nombreAleatoire; std::default_random_engine graine(nombreAleatoire()); 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 while(indexLibres.size() > (uint64_t)_tailleUnivers - _tailleUnivers / 4) @@ -31,18 +32,36 @@ void Univers::ajoutAnimaux(std::vector animaux) { while(!animaux.empty()) { _plateau[indexLibres.back()] = animaux.back()->id(); // on place notre animal 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 } } -void Univers::ajoutOrganisme(Organisme * organisme, int index) { +void Univers::modificationOrganisme(Organisme * organisme, int index) { if(index > _tailleUnivers) throw std::range_error("Impossible de placer un organisme à l'index spécifié."); _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++) if(i == 0) std::cout << "┌"; diff --git a/univers.hpp b/univers.hpp index d5f4cdd..b3b9491 100644 --- a/univers.hpp +++ b/univers.hpp @@ -24,12 +24,12 @@ class Univers { // Ajoute des animaux à l'univers void ajoutAnimaux(std::vector); - /* Ajoute un organisme + /* Modifie un organisme * Attention, écrase l'organisme précédent */ - void ajoutOrganisme(Organisme *, int); + void modificationOrganisme(Organisme *, int); // 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 bool enVie(void) const noexcept;