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;
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

View file

@ -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;

View file

@ -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

View file

@ -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;

View file

@ -4,7 +4,7 @@
#include <map>
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<int, char> _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<int, std::pair<int, int>> position(int) const noexcept;
// Renvoie un index libre
int recuperationIndexLibre(int);
};
#endif

View file

@ -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;

View file

@ -1,11 +1,11 @@
#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
_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),
Animal::Animal(int universID, int index, int ageMax, int age, int vitesse): Organisme(universID, index),
_vitesse(vitesse),
_ageMAX(ageMax),
_age(age) { }

View file

@ -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] = ' ';
}

View file

@ -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';
}

View file

@ -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';
}

View file

@ -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<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"
Sel::Sel(int universID, int x, int y): Organisme(universID, x, y) {
Sel::Sel(int universID, int index): Organisme(universID, index) {
_correspondance[ID] = '-';
}