- 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:
Mylloon 2022-04-02 00:46:38 +02:00
parent 02e7abd13d
commit feb473514d
Signed by: Anri
GPG key ID: A82D63DFF8D1317F
2 changed files with 75 additions and 6 deletions

View file

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

View file

@ -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