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
Mylloon 189c38088d
Modifications
- N'ajoute que des animaux à la simulation
- Store plusieurs variables dans la classe plutot que dans la méthode d'ajout d'animaux
- Possibilité d'ajouté un organisme tout seul
- Déclaration méthode d'affichage de l'univers
- Ajout des mot-clés const et noexcept lorsque possible
- Ajout de Herbe & Sel
2022-04-02 01:39:36 +02:00

105 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) {
}
// -------- 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;
}
// -------- Animal --------
Animal::Animal(void): Organisme() {
}
// -------- 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;
}