Ajouts
- Univers garde le nombre d'organismes, et ceux en vie - Chaque organisme a un ID - Plateau par défaut remplie d'herbe - Ajoute les organismes dans l'univers via un vecteur, gestion du nombre d'organismes max
This commit is contained in:
parent
02e7abd13d
commit
feb473514d
2 changed files with 75 additions and 6 deletions
55
univers.cpp
55
univers.cpp
|
@ -3,13 +3,37 @@
|
||||||
// -------- Univers --------
|
// -------- Univers --------
|
||||||
|
|
||||||
Univers::Univers(int m, int n): _m(m), _n(n), _tour(0) {
|
Univers::Univers(int m, int n): _m(m), _n(n), _tour(0) {
|
||||||
_plateau = new int[m * n];
|
_plateau = new int[m * n](); // initialise toutes les valeurs du tableau à 0
|
||||||
|
}
|
||||||
|
|
||||||
|
Univers::~Univers(void) {
|
||||||
|
delete[] _plateau;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Univers::ajoutOrganismes(std::vector<Organisme*> organismes) {
|
void Univers::ajoutOrganismes(std::vector<Organisme*> organismes) {
|
||||||
uint64_t tailleUnivers = _m * _n;
|
const uint64_t tailleUnivers = _m * _n,
|
||||||
if(organismes.size() > tailleUnivers - tailleUnivers / 4)
|
tailleMaxUnivers = tailleUnivers - tailleUnivers / 4,
|
||||||
throw std::domain_error("Trop d'organismes pour l'univers.\n");
|
nbOrganismesFinales = _nbOrganisme + organismes.size();
|
||||||
|
if(organismes.size() + _nbOrganisme > tailleMaxUnivers)
|
||||||
|
throw std::domain_error("Trop d'organismes pour l'univers.");
|
||||||
|
|
||||||
|
/* std::cout << "tailleUnivers : " << tailleUnivers << std::endl;
|
||||||
|
std::cout << "tailleMaxUnivers : " << tailleMaxUnivers << std::endl;
|
||||||
|
std::cout << "organismes.size() : " << organismes.size() << std::endl; */
|
||||||
|
|
||||||
|
for(uint64_t i = _nbOrganisme, j; i < nbOrganismesFinales;) {
|
||||||
|
j = rand() % tailleUnivers; // case aléatoire
|
||||||
|
if(_plateau[j] == 0) { // si on est sur de l'herbe
|
||||||
|
_plateau[j] = organismes.back()->id(); // on place notre organisme
|
||||||
|
organismes.pop_back(); // on le retire du vecteur
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
_nbOrganisme = nbOrganismesFinales;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool Univers::enVie(void) {
|
||||||
|
return _nbOrganismesEnVie > 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
// -------- Organisme --------
|
// -------- Organisme --------
|
||||||
|
@ -18,14 +42,37 @@ Organisme::Organisme(void) {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// -------- Animal --------
|
||||||
|
|
||||||
|
Animal::Animal(void): Organisme() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// -------- Mouton --------
|
// -------- Mouton --------
|
||||||
|
|
||||||
|
Mouton::Mouton(void): Animal() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
bool Mouton::carnivore(void) {
|
bool Mouton::carnivore(void) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int Mouton::id(void) {
|
||||||
|
return 2;
|
||||||
|
}
|
||||||
|
|
||||||
// -------- Loup --------
|
// -------- Loup --------
|
||||||
|
|
||||||
|
Loup::Loup(void): Animal() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
bool Loup::carnivore(void) {
|
bool Loup::carnivore(void) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int Loup::id(void) {
|
||||||
|
return 3;
|
||||||
|
}
|
||||||
|
|
26
univers.hpp
26
univers.hpp
|
@ -9,50 +9,72 @@ class Organisme;
|
||||||
class Univers {
|
class Univers {
|
||||||
friend class Organisme;
|
friend class Organisme;
|
||||||
|
|
||||||
int _m, _n, _tour;
|
int _m, _n, _tour, _nbOrganisme, _nbOrganismesEnVie;
|
||||||
int * _plateau;
|
int * _plateau;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
Univers(int, int);
|
Univers(int, int);
|
||||||
|
~Univers(void);
|
||||||
|
|
||||||
void ajoutOrganismes(std::vector<Organisme*>);
|
void ajoutOrganismes(std::vector<Organisme*>);
|
||||||
|
|
||||||
|
bool enVie(void);
|
||||||
};
|
};
|
||||||
|
|
||||||
class Organisme {
|
class Organisme {
|
||||||
public:
|
public:
|
||||||
Organisme(void);
|
Organisme(void);
|
||||||
|
|
||||||
|
// Renvoie l'ID de l'organisme
|
||||||
|
virtual int id(void) = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
class Animal: public Organisme {
|
class Animal: public Organisme {
|
||||||
public:
|
public:
|
||||||
Animal(void);
|
Animal(void);
|
||||||
|
|
||||||
|
// Animal carnivore ?
|
||||||
virtual bool carnivore(void) = 0;
|
virtual bool carnivore(void) = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
class Herbe: public Organisme {
|
class Herbe: public Organisme {
|
||||||
public:
|
public:
|
||||||
Herbe(void);
|
Herbe(void);
|
||||||
|
|
||||||
|
// Représenté par "0" dans l'univers
|
||||||
|
int id(void);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// Représenté par "1" dans l'univers
|
||||||
class Sel: public Organisme {
|
class Sel: public Organisme {
|
||||||
public:
|
public:
|
||||||
Sel(void);
|
Sel(void);
|
||||||
|
|
||||||
|
// Représenté par "1" dans l'univers
|
||||||
|
int id(void);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// Représenté par "2" dans l'univers
|
||||||
class Mouton: public Animal {
|
class Mouton: public Animal {
|
||||||
public:
|
public:
|
||||||
Mouton(void);
|
Mouton(void);
|
||||||
|
|
||||||
bool carnivore(void);
|
bool carnivore(void);
|
||||||
|
|
||||||
|
// Représenté par "2" dans l'univers
|
||||||
|
int id(void);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// Représenté par "3" dans l'univers
|
||||||
class Loup: public Animal {
|
class Loup: public Animal {
|
||||||
public:
|
public:
|
||||||
Loup(void);
|
Loup(void);
|
||||||
|
|
||||||
bool carnivore(void);
|
bool carnivore(void);
|
||||||
|
|
||||||
|
// Représenté par "3" dans l'univers
|
||||||
|
int id(void);
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
Reference in a new issue