- 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(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) {
uint64_t tailleUnivers = _m * _n;
if(organismes.size() > tailleUnivers - tailleUnivers / 4)
throw std::domain_error("Trop d'organismes pour l'univers.\n");
const uint64_t tailleUnivers = _m * _n,
tailleMaxUnivers = tailleUnivers - tailleUnivers / 4,
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 --------
@ -18,14 +42,37 @@ Organisme::Organisme(void) {
}
// -------- Animal --------
Animal::Animal(void): Organisme() {
}
// -------- Mouton --------
Mouton::Mouton(void): Animal() {
}
bool Mouton::carnivore(void) {
return false;
}
int Mouton::id(void) {
return 2;
}
// -------- Loup --------
Loup::Loup(void): Animal() {
}
bool Loup::carnivore(void) {
return false;
}
int Loup::id(void) {
return 3;
}

View file

@ -9,50 +9,72 @@ class Organisme;
class Univers {
friend class Organisme;
int _m, _n, _tour;
int _m, _n, _tour, _nbOrganisme, _nbOrganismesEnVie;
int * _plateau;
public:
Univers(int, int);
~Univers(void);
void ajoutOrganismes(std::vector<Organisme*>);
bool enVie(void);
};
class Organisme {
public:
Organisme(void);
// Renvoie l'ID de l'organisme
virtual int id(void) = 0;
};
class Animal: public Organisme {
public:
Animal(void);
// Animal carnivore ?
virtual bool carnivore(void) = 0;
};
class Herbe: public Organisme {
public:
Herbe(void);
// Représenté par "0" dans l'univers
int id(void);
};
// Représenté par "1" dans l'univers
class Sel: public Organisme {
public:
Sel(void);
// Représenté par "1" dans l'univers
int id(void);
};
// Représenté par "2" dans l'univers
class Mouton: public Animal {
public:
Mouton(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 {
public:
Loup(void);
bool carnivore(void);
// Représenté par "3" dans l'univers
int id(void);
};
#endif