110 lines
2.2 KiB
C++
110 lines
2.2 KiB
C++
#include "univers.hpp"
|
|
|
|
// -------- Univers --------
|
|
|
|
Univers::Univers(int m, int n): _m(m), _n(n), _tailleUnivers(m * n), _tailleMax(_tailleUnivers - _tailleUnivers / 4), _tour(0), _nbAnimaux(0) {
|
|
_plateau = new int[m * n](); // initialise toutes les valeurs du tableau à 0
|
|
}
|
|
|
|
Univers::~Univers(void) {
|
|
delete[] _plateau;
|
|
}
|
|
|
|
void Univers::ajoutAnimaux(std::vector<Animal*> animaux) {
|
|
const int nbOrganismeFinales = _nbAnimaux + animaux.size();
|
|
if(nbOrganismeFinales > _tailleMax)
|
|
throw std::domain_error("Trop d'organismes pour l'univers.");
|
|
|
|
/* ici crée un truc qui stocke tous les index possible
|
|
* pour éviter d'avoir a faire un random sur des index
|
|
* déjà occupé par autre chose.
|
|
* -> Quelque chose qui appartient directement à la classe ?
|
|
* -> map/filter? */
|
|
|
|
while(_nbAnimaux < nbOrganismeFinales) {
|
|
int i = rand() % _tailleUnivers; // case aléatoire
|
|
if(_plateau[i] == 0) { // si on est sur de l'herbe
|
|
_plateau[i] = animaux.back()->id(); // on place notre animal
|
|
animaux.pop_back(); // on le retire du vecteur
|
|
|
|
_nbAnimaux++;
|
|
}
|
|
}
|
|
}
|
|
|
|
void Univers::ajoutOrganisme(Organisme * organisme, int index) {
|
|
if(index > _tailleMax)
|
|
throw std::range_error("Impossible de placer un organisme à l'index spécifié");
|
|
|
|
_plateau[index] = organisme->id(); // on place notre organisme
|
|
}
|
|
|
|
bool Univers::enVie(void) const noexcept {
|
|
return _nbAnimaux > 0;
|
|
}
|
|
|
|
|
|
// -------- Organisme --------
|
|
|
|
Organisme::Organisme(void) {
|
|
|
|
}
|
|
|
|
|
|
// -------- Animal --------
|
|
|
|
Animal::Animal(void): Organisme() {
|
|
|
|
}
|
|
|
|
|
|
// -------- Herbe --------
|
|
|
|
Herbe::Herbe(void): Organisme() {
|
|
|
|
}
|
|
|
|
int Herbe::id(void) const noexcept {
|
|
return 0;
|
|
}
|
|
|
|
|
|
// -------- Sel --------
|
|
|
|
Sel::Sel(void): Organisme() {
|
|
|
|
}
|
|
|
|
int Sel::id(void) const noexcept {
|
|
return -1;
|
|
}
|
|
|
|
|
|
// -------- Mouton --------
|
|
|
|
Mouton::Mouton(void): Animal() {
|
|
|
|
}
|
|
|
|
bool Mouton::carnivore(void) const noexcept {
|
|
return false;
|
|
}
|
|
|
|
int Mouton::id(void) const noexcept {
|
|
return 1;
|
|
}
|
|
|
|
|
|
// -------- Loup --------
|
|
|
|
Loup::Loup(void): Animal() {
|
|
|
|
}
|
|
|
|
bool Loup::carnivore(void) const noexcept {
|
|
return false;
|
|
}
|
|
|
|
int Loup::id(void) const noexcept {
|
|
return 2;
|
|
}
|