Modifications

- Requiert désormais un index et non pas des coordonées (x, y)
- Méthode position() qui renvoie la position de l'organisme dans un univers donné
- Méthode recuperationIDLibre() qui renvoie un index libre dans un univers donné
This commit is contained in:
Mylloon 2022-04-04 23:21:05 +02:00
parent 573c5838d9
commit be2d39ee8c
Signed by: Anri
GPG key ID: A82D63DFF8D1317F
12 changed files with 63 additions and 22 deletions

View file

@ -21,8 +21,12 @@ class Animal: public Organisme {
virtual int generationVitesse(void) const noexcept = 0; virtual int generationVitesse(void) const noexcept = 0;
public: public:
// ID de l'univers, age max, age actuel, vitesse
Animal(int, int, int, int); 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); virtual ~Animal(void);
// Renvoie vrai // Renvoie vrai

View file

@ -5,7 +5,8 @@
class Herbe: public Organisme { class Herbe: public Organisme {
public: public:
Herbe(int, int, int); // ID de l'univers, index dans l'univers
Herbe(int, int);
// Renvoie faux // Renvoie faux
bool animal(void) const noexcept; bool animal(void) const noexcept;

View file

@ -7,8 +7,12 @@ class Loup: public Animal {
int generationVitesse(void) const noexcept; int generationVitesse(void) const noexcept;
public: public:
// ID de l'univers
Loup(int); Loup(int);
Loup(int, int, int);
// ID de l'univers, index dans l'univers
Loup(int, int);
~Loup(void); ~Loup(void);
// Renvoie vrai // Renvoie vrai

View file

@ -7,8 +7,11 @@ class Mouton: public Animal {
int generationVitesse(void) const noexcept; int generationVitesse(void) const noexcept;
public: public:
// ID de l'univers
Mouton(int); Mouton(int);
Mouton(int, int, int);
// ID de l'univers, index dans l'univers
Mouton(int, int);
// Renvoie faux // Renvoie faux
bool carnivore(void) const noexcept; bool carnivore(void) const noexcept;

View file

@ -4,7 +4,7 @@
#include <map> #include <map>
class Organisme { 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: protected:
const int _universID; // stocke l'ID de l'univers où l'organisme est présent 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 */ * réalisé dans cette map */
static inline std::map<int, char> _correspondance; static inline std::map<int, char> _correspondance;
int x, y; // Location dans l'univers int _index; // Location dans l'univers
public: 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 // Renvoie la lettre correspondant à l'ID
static char lettre(int) noexcept; static char lettre(int) noexcept;
// Renvoie vrai si l'organisme est un animal // Renvoie vrai si l'organisme est un animal
virtual bool animal(void) const noexcept = 0; virtual bool animal(void) const noexcept = 0;
// Renvoie les positions exact de l'organisme dans l'univers
std::pair<int, std::pair<int, int>> position(int) const noexcept;
// Renvoie un index libre
int recuperationIndexLibre(int);
}; };
#endif #endif

View file

@ -5,7 +5,8 @@
class Sel: public Organisme { class Sel: public Organisme {
public: public:
Sel(int, int, int); // ID de l'univers, index dans l'univers
Sel(int, int);
// Renvoie faux // Renvoie faux
bool animal(void) const noexcept; bool animal(void) const noexcept;

View file

@ -1,14 +1,14 @@
#include "../includes/animal.hpp" #include "../includes/animal.hpp"
Animal::Animal(int universID, int ageMax, int age, int vitesse): Organisme(universID, 1, 1), // TODO : remplacé 1, 1 Animal::Animal(int universID, int ageMax, int age, int vitesse): Organisme(universID, recuperationIndexLibre(universID)), // position aléatoire
_vitesse(vitesse), // par des coordonées _vitesse(vitesse), // par des coordonées
_ageMAX(ageMax), // d'un index de _ageMAX(ageMax), // d'un index de
_age(age) { } // indexLibres (listeUnivers[ID].first) _age(age) { } // indexLibres (listeUnivers[ID].first)
Animal::Animal(int universID, int x, int y, int ageMax, int age, int vitesse): Organisme(universID, x, y), Animal::Animal(int universID, int index, int ageMax, int age, int vitesse): Organisme(universID, index),
_vitesse(vitesse), _vitesse(vitesse),
_ageMAX(ageMax), _ageMAX(ageMax),
_age(age) { } _age(age) { }
Animal::~Animal(void) { } Animal::~Animal(void) { }

View file

@ -1,6 +1,6 @@
#include "../includes/herbe.hpp" #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] = ' '; _correspondance[ID] = ' ';
} }

View file

@ -4,7 +4,7 @@ Loup::Loup(int universID): Animal(universID, 60, 0, Loup::generationVitesse()) {
_correspondance[ID] = 'L'; _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'; _correspondance[ID] = 'L';
} }

View file

@ -4,7 +4,7 @@ Mouton::Mouton(int universID): Animal(universID, 50, 0, Mouton::generationVitess
_correspondance[ID] = 'M'; _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'; _correspondance[ID] = 'M';
} }

View file

@ -1,13 +1,32 @@
#include "../includes/univers.hpp" #include "../includes/univers.hpp"
#include "../includes/organisme.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 __totalID = ID; // + 1 aux ID
Univers::listeUnivers[_universID].second.push_back(this); 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 { char Organisme::lettre(int id) noexcept {
if(_correspondance[id]) if(_correspondance[id])
return _correspondance[id]; return _correspondance[id];
return ' '; return ' ';
} }
std::pair<int, std::pair<int, int>> 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;
}

View file

@ -1,6 +1,6 @@
#include "../includes/sel.hpp" #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] = '-'; _correspondance[ID] = '-';
} }