Modifications

- Ajoute correctement le nombre d'animaux
- Met à jour correctement les index libres lorsque l'on modifie un organisme
- Affichage constant et sans exception
This commit is contained in:
Mylloon 2022-04-02 16:03:20 +02:00
parent e419f323f9
commit 86ef204701
Signed by: Anri
GPG key ID: A82D63DFF8D1317F
2 changed files with 24 additions and 5 deletions

View file

@ -13,6 +13,7 @@ Univers::Univers(int m, int n): _m(m), _n(n), _tailleUnivers(m * n), _tour(0), _
std::random_device nombreAleatoire;
std::default_random_engine graine(nombreAleatoire());
std::shuffle(indexLibres.begin(), indexLibres.end(), graine);
//std::random_shuffle(indexLibres.begin(), indexLibres.end()); // random pas vraiment random pour les tests
// On en retire quelque un pour évité de saturé notre univers
while(indexLibres.size() > (uint64_t)_tailleUnivers - _tailleUnivers / 4)
@ -31,18 +32,36 @@ void Univers::ajoutAnimaux(std::vector<Animal*> animaux) {
while(!animaux.empty()) {
_plateau[indexLibres.back()] = animaux.back()->id(); // on place notre animal
animaux.pop_back(); // on retire l'animal du vecteur
_nbAnimaux++; // incrémente le nombre d'animaux
indexLibres.pop_back(); // on retire l'index du vecteur
}
}
void Univers::ajoutOrganisme(Organisme * organisme, int index) {
void Univers::modificationOrganisme(Organisme * organisme, int index) {
if(index > _tailleUnivers)
throw std::range_error("Impossible de placer un organisme à l'index spécifié.");
_plateau[index] = organisme->id(); // on place notre organisme
std::cout << "indexLibres.size() -> " << indexLibres.size() << std::endl;
std::cout << "----------------------" << std::endl;
auto it = std::find(indexLibres.begin(), indexLibres.end(), index);
if(it == indexLibres.end()) { // si index non libre (pas présent dans le vecteur)
if(organisme->id() <= 0) // si c'est non vivant
indexLibres.push_back(index); // on le rajoute
} else { // si index libre (présent dans le vecteur)
if(organisme->id() > 0) { // si c'est vivant
_nbAnimaux++; // incrémente le nombre d'animaux
indexLibres.erase(it); // on le retire
}
}
std::cout << "indexLibres.size() -> " << indexLibres.size() << std::endl;
std::cout << "----------------------" << std::endl;
}
void Univers::affichage(void) {
void Univers::affichage(void) const noexcept {
for(int i = 0; i < _n * 5; i++)
if(i == 0)
std::cout << "";

View file

@ -24,12 +24,12 @@ class Univers {
// Ajoute des animaux à l'univers
void ajoutAnimaux(std::vector<Animal*>);
/* Ajoute un organisme
/* Modifie un organisme
* Attention, écrase l'organisme précédent */
void ajoutOrganisme(Organisme *, int);
void modificationOrganisme(Organisme *, int);
// Affiche l'univers à l'instant présent
void affichage(void);
void affichage(void) const noexcept;
// Vérifie s'il y a de la vie dans l'univers
bool enVie(void) const noexcept;