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;
|
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
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -1,11 +1,11 @@
|
||||||
#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) { }
|
||||||
|
|
|
@ -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] = ' ';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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;
|
||||||
|
}
|
||||||
|
|
|
@ -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] = '-';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Reference in a new issue