From ed2bfbb2a33c44ed0f8ce2ec13e8d6cd0bf0feb7 Mon Sep 17 00:00:00 2001 From: Mylloon Date: Sun, 10 Apr 2022 20:36:07 +0200 Subject: [PATCH] =?UTF-8?q?S=C3=A9pare=20les=20organismes=20pr=C3=A9sent?= =?UTF-8?q?=20dans=20l'univers=20et=20les=20index=20libres?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- includes/univers.hpp | 14 +++++++++----- src/evenement.cpp | 6 +++--- src/organisme.cpp | 16 ++++++++-------- src/sel.cpp | 6 +++--- src/univers.cpp | 10 +++++----- 5 files changed, 28 insertions(+), 24 deletions(-) diff --git a/includes/univers.hpp b/includes/univers.hpp index 7e0ab3d..841a8bb 100644 --- a/includes/univers.hpp +++ b/includes/univers.hpp @@ -17,7 +17,8 @@ class Univers { const int m_longueur, m_largeur, m_taille_univers; // dimensions de l'univers int m_tour; // âge de l'univers - inline static std::map> m_dimensions_univers; // Dimensions de l'univers (largeur, longueur) + // Stocke pour chaque ID d'univers les dimensions de l'univers (largeur, longueur) + inline static std::map> m_dimensions_univers; inline static int m_total_ID; // s'incrémente à chaque création d'univers @@ -25,10 +26,13 @@ class Univers { static void melange(std::vector * vecteur); public: - // Stocke pour chaque numéro d'univers : - // - les index libres (non occupés) - // - les organismes présent dans l'univers - inline static std::map, std::vector>> m_liste_univers; + // Stocke pour chaque ID d'univers les organismes présent dans l'univers + inline static std::map> m_organismes_univers; + + // Stocke pour chaque ID d'univers les index libres + // first => organismes qui peuvent se superposer (herbe, sel...) + // second => organismes qui ne le peuvent pas (animaux) + inline static std::map, std::vector>> m_index_libres_univers; const int ID; // ID unique pour chaque univers diff --git a/src/evenement.cpp b/src/evenement.cpp index ccead8a..caedefe 100644 --- a/src/evenement.cpp +++ b/src/evenement.cpp @@ -28,7 +28,7 @@ void Evenement::affichage(Univers * univers, const bool traits) noexcept { // On génère le plateau pour l'affichage int * plateau = new int[univers->m_taille_univers](); - for(auto it: univers->m_liste_univers[univers->ID].second) { + for(auto it: univers->m_organismes_univers[univers->ID]) { // Vérification : un animal doit avoir la priorité sur // un autre organisme dans l'affichage if(plateau[it->position(univers->ID).first] == 0) { // pas de souci, aucun organisme à cette position @@ -152,10 +152,10 @@ void Evenement::lancerSimulation(Univers * univers) { // 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()); + std::sort(univers->m_organismes_univers[univers->ID].begin(), univers->m_organismes_univers[univers->ID].end(), comp_organisme()); // Pour tout les organismes de notre univers - for(auto it: univers->m_liste_univers[univers->ID].second) { + for(auto it: univers->m_organismes_univers[univers->ID]) { it->action(); // Fais ce qu'il a à faire pendant son tour } diff --git a/src/organisme.cpp b/src/organisme.cpp index 266a37a..0f4eff1 100644 --- a/src/organisme.cpp +++ b/src/organisme.cpp @@ -2,32 +2,32 @@ #include "../includes/organisme.hpp" Organisme::Organisme(const int univers_ID, const int index): m_univers_ID(univers_ID), m_index(index), ID(m_total_ID + 1) { - if(Univers::m_liste_univers[m_univers_ID].first.size() == 0) { // si il n'y a plus d'index de libres + if(Univers::m_index_libres_univers[m_univers_ID].first.size() == 0) { // si il n'y a plus d'index de libres throw std::domain_error("Trop d'organismes pour l'univers."); } m_total_ID = ID; // + 1 aux ID - Univers::m_liste_univers[m_univers_ID].second.push_back(this); + Univers::m_organismes_univers[m_univers_ID].push_back(this); // Supprime l'index maintenant pris par un organisme - auto debut = Univers::m_liste_univers[m_univers_ID].first.begin(); - auto fin = Univers::m_liste_univers[m_univers_ID].first.end(); + auto debut = Univers::m_index_libres_univers[m_univers_ID].first.begin(); + auto fin = Univers::m_index_libres_univers[m_univers_ID].first.end(); auto it = std::find(debut, fin, index); if(it != fin) { - Univers::m_liste_univers[m_univers_ID].first.erase(it); + Univers::m_index_libres_univers[m_univers_ID].first.erase(it); } } -Organisme::Organisme(const int univers_ID): Organisme(univers_ID, Univers::m_liste_univers[univers_ID].first.back()) {} +Organisme::Organisme(const int univers_ID): Organisme(univers_ID, Univers::m_index_libres_univers[univers_ID].first.back()) {} Organisme::~Organisme(void) { // On remet notre index dans le vecteur des index vide - Univers::m_liste_univers[m_univers_ID].first.push_back(m_index); + Univers::m_index_libres_univers[m_univers_ID].first.push_back(m_index); // Attention: si l'organisme meurt après avoir été mangé, il faut bien faire // attention que l'index libre soit véritablement libre et pas qu'il soit enfaite // prit par l'assassin de notre organisme actuel // On remélange notre vecteur - Univers::melange(&Univers::m_liste_univers[m_univers_ID].first); + Univers::melange(&Univers::m_index_libres_univers[m_univers_ID].first); } char Organisme::lettre(const int id) noexcept { diff --git a/src/sel.cpp b/src/sel.cpp index 3d7828f..cc55259 100644 --- a/src/sel.cpp +++ b/src/sel.cpp @@ -11,11 +11,11 @@ Sel::Sel(const int univers_ID): Organisme(univers_ID) { Sel::~Sel(void) { // On se supprime du vecteur - auto debut = Univers::m_liste_univers[m_univers_ID].second.begin(); - auto fin = Univers::m_liste_univers[m_univers_ID].second.end(); + auto debut = Univers::m_organismes_univers[m_univers_ID].begin(); + auto fin = Univers::m_organismes_univers[m_univers_ID].end(); auto it = std::find(debut, fin, this); if(it != fin) { - Univers::m_liste_univers[m_univers_ID].second.erase(it); + Univers::m_organismes_univers[m_univers_ID].erase(it); } // On ajoute une herbe à la place diff --git a/src/univers.cpp b/src/univers.cpp index 2020c34..6414d19 100644 --- a/src/univers.cpp +++ b/src/univers.cpp @@ -9,14 +9,14 @@ Univers::Univers(const int longueur, const int largeur): m_longueur(longueur), // On ajoute tous les index possibles car pour l'instant le plateau est vide for(int i = 0; i < m_taille_univers; ++i) { - m_liste_univers[ID].first.push_back(i); + m_index_libres_univers[ID].first.push_back(i); } // On mélange notre vecteur d'index non occupés - melange(&m_liste_univers[ID].first); + melange(&m_index_libres_univers[ID].first); // Remplie quelques valeurs du tableau avec de l'herbe - while(m_liste_univers[ID].first.size() > static_cast(m_taille_univers - m_taille_univers / 2)) { + while(m_index_libres_univers[ID].first.size() > static_cast(m_taille_univers - m_taille_univers / 2)) { // cast static grâce à "-Wold-style-cast" et "-Wsign-conversion" new Herbe(ID); } @@ -26,7 +26,7 @@ Univers::Univers(const int longueur, const int largeur): m_longueur(longueur), } Univers::~Univers(void) { - for(auto it: m_liste_univers[ID].second) { // Supprime les organismes présent dans l'univers + for(auto it: m_organismes_univers[ID]) { // Supprime les organismes présent dans l'univers delete it; } } @@ -38,7 +38,7 @@ void Univers::melange(std::vector * vecteur) { } bool Univers::enVie(void) const noexcept { - for(auto organisme: m_liste_univers[ID].second) { // on parcours les organismes de notre univers + for(auto organisme: m_organismes_univers[ID]) { // on parcours les organismes de notre univers if(dynamic_cast(organisme)) { // si c'est un animal return true; // renvoie true }