This repository has been archived on 2022-05-02. You can view files and clone it, but cannot push or open issues or pull requests.
Ecosysteme/univers.cpp

111 lines
2.2 KiB
C++
Raw Normal View History

#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;
}
2022-04-02 01:42:51 +02:00
// -------- Organisme --------
Organisme::Organisme(void) {
}
2022-04-02 01:42:51 +02:00
// -------- Animal --------
Animal::Animal(void): Organisme() {
}
// -------- Herbe --------
Herbe::Herbe(void): Organisme() {
}
int Herbe::id(void) const noexcept {
return 0;
}
2022-04-02 01:42:51 +02:00
// -------- 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;
}
2022-04-02 01:42:51 +02:00
// -------- Loup --------
Loup::Loup(void): Animal() {
}
bool Loup::carnivore(void) const noexcept {
return false;
}
int Loup::id(void) const noexcept {
return 2;
}