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
This commit is contained in:
parent
feb473514d
commit
189c38088d
3 changed files with 81 additions and 40 deletions
8
main.cpp
8
main.cpp
|
@ -3,18 +3,18 @@
|
||||||
void lancerSimulation(Univers * univers, int m, int n, int nb_moutons, int nb_loups) {
|
void lancerSimulation(Univers * univers, int m, int n, int nb_moutons, int nb_loups) {
|
||||||
univers = new Univers(m, n);
|
univers = new Univers(m, n);
|
||||||
|
|
||||||
std::vector<Organisme*> organismes;
|
std::vector<Animal*> animaux;
|
||||||
|
|
||||||
while(nb_moutons > 0) {
|
while(nb_moutons > 0) {
|
||||||
organismes.push_back(new Mouton());
|
animaux.push_back(new Mouton());
|
||||||
nb_moutons--;
|
nb_moutons--;
|
||||||
}
|
}
|
||||||
while(nb_loups > 0) {
|
while(nb_loups > 0) {
|
||||||
organismes.push_back(new Loup());
|
animaux.push_back(new Loup());
|
||||||
nb_loups--;
|
nb_loups--;
|
||||||
}
|
}
|
||||||
|
|
||||||
univers->ajoutOrganismes(organismes);
|
univers->ajoutAnimaux(animaux);
|
||||||
}
|
}
|
||||||
|
|
||||||
void arreterSimulation(Univers * univers) {
|
void arreterSimulation(Univers * univers) {
|
||||||
|
|
75
univers.cpp
75
univers.cpp
|
@ -2,7 +2,7 @@
|
||||||
|
|
||||||
// -------- Univers --------
|
// -------- Univers --------
|
||||||
|
|
||||||
Univers::Univers(int m, int n): _m(m), _n(n), _tour(0) {
|
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
|
_plateau = new int[m * n](); // initialise toutes les valeurs du tableau à 0
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -10,30 +10,37 @@ Univers::~Univers(void) {
|
||||||
delete[] _plateau;
|
delete[] _plateau;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Univers::ajoutOrganismes(std::vector<Organisme*> organismes) {
|
void Univers::ajoutAnimaux(std::vector<Animal*> animaux) {
|
||||||
const uint64_t tailleUnivers = _m * _n,
|
const int nbOrganismeFinales = _nbAnimaux + animaux.size();
|
||||||
tailleMaxUnivers = tailleUnivers - tailleUnivers / 4,
|
if(nbOrganismeFinales > _tailleMax)
|
||||||
nbOrganismesFinales = _nbOrganisme + organismes.size();
|
|
||||||
if(organismes.size() + _nbOrganisme > tailleMaxUnivers)
|
|
||||||
throw std::domain_error("Trop d'organismes pour l'univers.");
|
throw std::domain_error("Trop d'organismes pour l'univers.");
|
||||||
|
|
||||||
/* std::cout << "tailleUnivers : " << tailleUnivers << std::endl;
|
/* ici crée un truc qui stocke tous les index possible
|
||||||
std::cout << "tailleMaxUnivers : " << tailleMaxUnivers << std::endl;
|
* pour éviter d'avoir a faire un random sur des index
|
||||||
std::cout << "organismes.size() : " << organismes.size() << std::endl; */
|
* déjà occupé par autre chose.
|
||||||
|
* -> Quelque chose qui appartient directement à la classe ?
|
||||||
|
* -> map/filter? */
|
||||||
|
|
||||||
for(uint64_t i = _nbOrganisme, j; i < nbOrganismesFinales;) {
|
while(_nbAnimaux < nbOrganismeFinales) {
|
||||||
j = rand() % tailleUnivers; // case aléatoire
|
int i = rand() % _tailleUnivers; // case aléatoire
|
||||||
if(_plateau[j] == 0) { // si on est sur de l'herbe
|
if(_plateau[i] == 0) { // si on est sur de l'herbe
|
||||||
_plateau[j] = organismes.back()->id(); // on place notre organisme
|
_plateau[i] = animaux.back()->id(); // on place notre animal
|
||||||
organismes.pop_back(); // on le retire du vecteur
|
animaux.pop_back(); // on le retire du vecteur
|
||||||
i++;
|
|
||||||
|
_nbAnimaux++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
_nbOrganisme = nbOrganismesFinales;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Univers::enVie(void) {
|
void Univers::ajoutOrganisme(Organisme * organisme, int index) {
|
||||||
return _nbOrganismesEnVie > 0;
|
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 --------
|
||||||
|
@ -42,6 +49,26 @@ 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::Animal(void): Organisme() {
|
Animal::Animal(void): Organisme() {
|
||||||
|
@ -55,12 +82,12 @@ Mouton::Mouton(void): Animal() {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Mouton::carnivore(void) {
|
bool Mouton::carnivore(void) const noexcept {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
int Mouton::id(void) {
|
int Mouton::id(void) const noexcept {
|
||||||
return 2;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
// -------- Loup --------
|
// -------- Loup --------
|
||||||
|
@ -69,10 +96,10 @@ Loup::Loup(void): Animal() {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Loup::carnivore(void) {
|
bool Loup::carnivore(void) const noexcept {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
int Loup::id(void) {
|
int Loup::id(void) const noexcept {
|
||||||
return 3;
|
return 2;
|
||||||
}
|
}
|
||||||
|
|
38
univers.hpp
38
univers.hpp
|
@ -5,28 +5,42 @@
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
class Organisme;
|
class Organisme;
|
||||||
|
class Animal;
|
||||||
|
|
||||||
class Univers {
|
class Univers {
|
||||||
friend class Organisme;
|
friend class Organisme;
|
||||||
|
|
||||||
int _m, _n, _tour, _nbOrganisme, _nbOrganismesEnVie;
|
const int _m, _n, _tailleUnivers, _tailleMax;
|
||||||
|
int _tour, _nbAnimaux;
|
||||||
int * _plateau;
|
int * _plateau;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
Univers(int, int);
|
Univers(int, int);
|
||||||
~Univers(void);
|
~Univers(void);
|
||||||
|
|
||||||
void ajoutOrganismes(std::vector<Organisme*>);
|
// Ajoute des animaux à l'univers
|
||||||
|
void ajoutAnimaux(std::vector<Animal*>);
|
||||||
|
|
||||||
bool enVie(void);
|
/* Ajoute un organisme
|
||||||
|
* Attention, écrase l'organisme précédent */
|
||||||
|
void ajoutOrganisme(Organisme *, int);
|
||||||
|
|
||||||
|
// Affiche l'univers à l'instant présent
|
||||||
|
void affichage(void);
|
||||||
|
|
||||||
|
// Vérifie s'il y a de la vie dans l'univers
|
||||||
|
bool enVie(void) const noexcept;
|
||||||
};
|
};
|
||||||
|
|
||||||
class Organisme {
|
class Organisme {
|
||||||
public:
|
public:
|
||||||
Organisme(void);
|
Organisme(void);
|
||||||
|
|
||||||
// Renvoie l'ID de l'organisme
|
/* Renvoie l'ID de l'organisme
|
||||||
virtual int id(void) = 0;
|
* Si `ID < 0` -> non vivant
|
||||||
|
* Si `ID > 0` -> vivant
|
||||||
|
* Si `ID == 0` -> Herbe */
|
||||||
|
virtual int id(void) const noexcept = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
class Animal: public Organisme {
|
class Animal: public Organisme {
|
||||||
|
@ -34,7 +48,7 @@ class Animal: public Organisme {
|
||||||
Animal(void);
|
Animal(void);
|
||||||
|
|
||||||
// Animal carnivore ?
|
// Animal carnivore ?
|
||||||
virtual bool carnivore(void) = 0;
|
virtual bool carnivore(void) const noexcept = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
class Herbe: public Organisme {
|
class Herbe: public Organisme {
|
||||||
|
@ -42,7 +56,7 @@ class Herbe: public Organisme {
|
||||||
Herbe(void);
|
Herbe(void);
|
||||||
|
|
||||||
// Représenté par "0" dans l'univers
|
// Représenté par "0" dans l'univers
|
||||||
int id(void);
|
int id(void) const noexcept;
|
||||||
};
|
};
|
||||||
|
|
||||||
// Représenté par "1" dans l'univers
|
// Représenté par "1" dans l'univers
|
||||||
|
@ -51,7 +65,7 @@ class Sel: public Organisme {
|
||||||
Sel(void);
|
Sel(void);
|
||||||
|
|
||||||
// Représenté par "1" dans l'univers
|
// Représenté par "1" dans l'univers
|
||||||
int id(void);
|
int id(void) const noexcept;
|
||||||
};
|
};
|
||||||
|
|
||||||
// Représenté par "2" dans l'univers
|
// Représenté par "2" dans l'univers
|
||||||
|
@ -59,10 +73,10 @@ class Mouton: public Animal {
|
||||||
public:
|
public:
|
||||||
Mouton(void);
|
Mouton(void);
|
||||||
|
|
||||||
bool carnivore(void);
|
bool carnivore(void) const noexcept;
|
||||||
|
|
||||||
// Représenté par "2" dans l'univers
|
// Représenté par "2" dans l'univers
|
||||||
int id(void);
|
int id(void) const noexcept;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -71,10 +85,10 @@ class Loup: public Animal {
|
||||||
public:
|
public:
|
||||||
Loup(void);
|
Loup(void);
|
||||||
|
|
||||||
bool carnivore(void);
|
bool carnivore(void) const noexcept;
|
||||||
|
|
||||||
// Représenté par "3" dans l'univers
|
// Représenté par "3" dans l'univers
|
||||||
int id(void);
|
int id(void) const noexcept;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
Reference in a new issue