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