From be2d39ee8cb3ebe31c9d6a637439311da125cad2 Mon Sep 17 00:00:00 2001 From: Mylloon Date: Mon, 4 Apr 2022 23:21:05 +0200 Subject: [PATCH] =?UTF-8?q?Modifications=20-=20Requiert=20d=C3=A9sormais?= =?UTF-8?q?=20un=20index=20et=20non=20pas=20des=20coordon=C3=A9es=20(x,=20?= =?UTF-8?q?y)=20-=20M=C3=A9thode=20position()=20qui=20renvoie=20la=20posit?= =?UTF-8?q?ion=20de=20l'organisme=20dans=20un=20univers=20donn=C3=A9=20-?= =?UTF-8?q?=20M=C3=A9thode=20recuperationIDLibre()=20qui=20renvoie=20un=20?= =?UTF-8?q?index=20libre=20dans=20un=20univers=20donn=C3=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- includes/animal.hpp | 6 +++++- includes/herbe.hpp | 3 ++- includes/loup.hpp | 6 +++++- includes/mouton.hpp | 5 ++++- includes/organisme.hpp | 17 +++++++++++++---- includes/sel.hpp | 3 ++- src/animal.cpp | 16 ++++++++-------- src/herbe.cpp | 2 +- src/loup.cpp | 2 +- src/mouton.cpp | 2 +- src/organisme.cpp | 21 ++++++++++++++++++++- src/sel.cpp | 2 +- 12 files changed, 63 insertions(+), 22 deletions(-) diff --git a/includes/animal.hpp b/includes/animal.hpp index 22a8f1a..367e402 100644 --- a/includes/animal.hpp +++ b/includes/animal.hpp @@ -21,8 +21,12 @@ class Animal: public Organisme { virtual int generationVitesse(void) const noexcept = 0; public: + // ID de l'univers, age max, age actuel, vitesse Animal(int, int, int, int); - Animal(int, int, int, int, int, int); + + // ID de l'univers, index dans l'univers, age max, age actuel, vitesse + Animal(int, int, int, int, int); + virtual ~Animal(void); // Renvoie vrai diff --git a/includes/herbe.hpp b/includes/herbe.hpp index 61c5692..9317b39 100644 --- a/includes/herbe.hpp +++ b/includes/herbe.hpp @@ -5,7 +5,8 @@ class Herbe: public Organisme { public: - Herbe(int, int, int); + // ID de l'univers, index dans l'univers + Herbe(int, int); // Renvoie faux bool animal(void) const noexcept; diff --git a/includes/loup.hpp b/includes/loup.hpp index 0e6c3fe..fd26914 100644 --- a/includes/loup.hpp +++ b/includes/loup.hpp @@ -7,8 +7,12 @@ class Loup: public Animal { int generationVitesse(void) const noexcept; public: + // ID de l'univers Loup(int); - Loup(int, int, int); + + // ID de l'univers, index dans l'univers + Loup(int, int); + ~Loup(void); // Renvoie vrai diff --git a/includes/mouton.hpp b/includes/mouton.hpp index 9511f9c..72069c0 100644 --- a/includes/mouton.hpp +++ b/includes/mouton.hpp @@ -7,8 +7,11 @@ class Mouton: public Animal { int generationVitesse(void) const noexcept; public: + // ID de l'univers Mouton(int); - Mouton(int, int, int); + + // ID de l'univers, index dans l'univers + Mouton(int, int); // Renvoie faux bool carnivore(void) const noexcept; diff --git a/includes/organisme.hpp b/includes/organisme.hpp index 3b3b655..6f69a29 100644 --- a/includes/organisme.hpp +++ b/includes/organisme.hpp @@ -4,7 +4,7 @@ #include class Organisme { - inline static int __totalID; // permet d'incrémenter de 1 l'ID de chaque animal + inline static int __totalID; // permet d'incrémenter de 1 l'ID de chaque organisme protected: const int _universID; // stocke l'ID de l'univers où l'organisme est présent @@ -15,18 +15,27 @@ class Organisme { * réalisé dans cette map */ static inline std::map _correspondance; - int x, y; // Location dans l'univers + int _index; // Location dans l'univers public: - const int ID; // ID unique pour chaque animal + const int ID; // ID unique pour chaque organisme - Organisme(int, int, int); + // ID de l'Univers, index dans l'univers + Organisme(int, int); + + virtual ~Organisme(void); // Renvoie la lettre correspondant à l'ID static char lettre(int) noexcept; // Renvoie vrai si l'organisme est un animal virtual bool animal(void) const noexcept = 0; + + // Renvoie les positions exact de l'organisme dans l'univers + std::pair> position(int) const noexcept; + + // Renvoie un index libre + int recuperationIndexLibre(int); }; #endif diff --git a/includes/sel.hpp b/includes/sel.hpp index 7236213..200aada 100644 --- a/includes/sel.hpp +++ b/includes/sel.hpp @@ -5,7 +5,8 @@ class Sel: public Organisme { public: - Sel(int, int, int); + // ID de l'univers, index dans l'univers + Sel(int, int); // Renvoie faux bool animal(void) const noexcept; diff --git a/src/animal.cpp b/src/animal.cpp index a1ea275..aa8c8db 100644 --- a/src/animal.cpp +++ b/src/animal.cpp @@ -1,14 +1,14 @@ #include "../includes/animal.hpp" -Animal::Animal(int universID, int ageMax, int age, int vitesse): Organisme(universID, 1, 1), // TODO : remplacé 1, 1 - _vitesse(vitesse), // par des coordonées - _ageMAX(ageMax), // d'un index de - _age(age) { } // indexLibres (listeUnivers[ID].first) +Animal::Animal(int universID, int ageMax, int age, int vitesse): Organisme(universID, recuperationIndexLibre(universID)), // position aléatoire + _vitesse(vitesse), // par des coordonées + _ageMAX(ageMax), // d'un index de + _age(age) { } // indexLibres (listeUnivers[ID].first) -Animal::Animal(int universID, int x, int y, int ageMax, int age, int vitesse): Organisme(universID, x, y), - _vitesse(vitesse), - _ageMAX(ageMax), - _age(age) { } +Animal::Animal(int universID, int index, int ageMax, int age, int vitesse): Organisme(universID, index), + _vitesse(vitesse), + _ageMAX(ageMax), + _age(age) { } Animal::~Animal(void) { } diff --git a/src/herbe.cpp b/src/herbe.cpp index 291f009..839e991 100644 --- a/src/herbe.cpp +++ b/src/herbe.cpp @@ -1,6 +1,6 @@ #include "../includes/herbe.hpp" -Herbe::Herbe(int universID, int x, int y): Organisme(universID, x, y) { +Herbe::Herbe(int universID, int index): Organisme(universID, index) { _correspondance[ID] = ' '; } diff --git a/src/loup.cpp b/src/loup.cpp index f4a2fc9..134955b 100644 --- a/src/loup.cpp +++ b/src/loup.cpp @@ -4,7 +4,7 @@ Loup::Loup(int universID): Animal(universID, 60, 0, Loup::generationVitesse()) { _correspondance[ID] = 'L'; } -Loup::Loup(int universID, int x, int y): Animal(universID, x, y, 60, 0, Loup::generationVitesse()) { +Loup::Loup(int universID, int index): Animal(universID, index, 60, 0, Loup::generationVitesse()) { _correspondance[ID] = 'L'; } diff --git a/src/mouton.cpp b/src/mouton.cpp index 410f323..9d1587b 100644 --- a/src/mouton.cpp +++ b/src/mouton.cpp @@ -4,7 +4,7 @@ Mouton::Mouton(int universID): Animal(universID, 50, 0, Mouton::generationVitess _correspondance[ID] = 'M'; } -Mouton::Mouton(int universID, int x, int y): Animal(universID, x, y, 50, 0, Mouton::generationVitesse()) { +Mouton::Mouton(int universID, int index): Animal(universID, index, 50, 0, Mouton::generationVitesse()) { _correspondance[ID] = 'M'; } diff --git a/src/organisme.cpp b/src/organisme.cpp index 8385cd7..b8f2f44 100644 --- a/src/organisme.cpp +++ b/src/organisme.cpp @@ -1,13 +1,32 @@ #include "../includes/univers.hpp" #include "../includes/organisme.hpp" -Organisme::Organisme(int universID, int x, int y): _universID(universID), x(x), y(y), ID(__totalID + 1) { +Organisme::Organisme(int universID, int index): _universID(universID), _index(index), ID(__totalID + 1) { + if(Univers::listeUnivers[universID].first.size() == 0) // si il n'y a plus d'index de libres + throw std::domain_error("Trop d'organismes pour l'univers."); __totalID = ID; // + 1 aux ID Univers::listeUnivers[_universID].second.push_back(this); } +Organisme::~Organisme(void) { + // TODO: rendre son ancienne position de nouveau disponible, re-shuffle après ajout ? +} + char Organisme::lettre(int id) noexcept { if(_correspondance[id]) return _correspondance[id]; return ' '; } + +std::pair> Organisme::position(int id) const noexcept { + return std::make_pair(_index, std::make_pair(_index / Univers::dimensionsUnivers[id].first, _index % Univers::dimensionsUnivers[id].first)); +} + +int Organisme::recuperationIndexLibre(int universID) { + if(Univers::listeUnivers[universID].first.size() == 0) // normalement c'est impossible que cette expection apparaisse + throw std::domain_error("Impossible d'attribuer une position à l'organisme."); + int res = Univers::listeUnivers[universID].first.back(); + Univers::listeUnivers[universID].first.pop_back(); + + return res; +} diff --git a/src/sel.cpp b/src/sel.cpp index 9fcdfe6..3e19afe 100644 --- a/src/sel.cpp +++ b/src/sel.cpp @@ -1,6 +1,6 @@ #include "../includes/sel.hpp" -Sel::Sel(int universID, int x, int y): Organisme(universID, x, y) { +Sel::Sel(int universID, int index): Organisme(universID, index) { _correspondance[ID] = '-'; }