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:
parent
573c5838d9
commit
be2d39ee8c
12 changed files with 63 additions and 22 deletions
|
@ -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
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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) { }
|
||||
|
|
|
@ -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] = ' ';
|
||||
}
|
||||
|
||||
|
|
|
@ -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';
|
||||
}
|
||||
|
||||
|
|
|
@ -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';
|
||||
}
|
||||
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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] = '-';
|
||||
}
|
||||
|
||||
|
|
Reference in a new issue