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:
parent
e419f323f9
commit
86ef204701
2 changed files with 24 additions and 5 deletions
23
univers.cpp
23
univers.cpp
|
@ -13,6 +13,7 @@ Univers::Univers(int m, int n): _m(m), _n(n), _tailleUnivers(m * n), _tour(0), _
|
||||||
std::random_device nombreAleatoire;
|
std::random_device nombreAleatoire;
|
||||||
std::default_random_engine graine(nombreAleatoire());
|
std::default_random_engine graine(nombreAleatoire());
|
||||||
std::shuffle(indexLibres.begin(), indexLibres.end(), graine);
|
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
|
// On en retire quelque un pour évité de saturé notre univers
|
||||||
while(indexLibres.size() > (uint64_t)_tailleUnivers - _tailleUnivers / 4)
|
while(indexLibres.size() > (uint64_t)_tailleUnivers - _tailleUnivers / 4)
|
||||||
|
@ -31,18 +32,36 @@ void Univers::ajoutAnimaux(std::vector<Animal*> animaux) {
|
||||||
while(!animaux.empty()) {
|
while(!animaux.empty()) {
|
||||||
_plateau[indexLibres.back()] = animaux.back()->id(); // on place notre animal
|
_plateau[indexLibres.back()] = animaux.back()->id(); // on place notre animal
|
||||||
animaux.pop_back(); // on retire l'animal du vecteur
|
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
|
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)
|
if(index > _tailleUnivers)
|
||||||
throw std::range_error("Impossible de placer un organisme à l'index spécifié.");
|
throw std::range_error("Impossible de placer un organisme à l'index spécifié.");
|
||||||
|
|
||||||
_plateau[index] = organisme->id(); // on place notre organisme
|
_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
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Univers::affichage(void) {
|
std::cout << "indexLibres.size() -> " << indexLibres.size() << std::endl;
|
||||||
|
std::cout << "----------------------" << std::endl;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Univers::affichage(void) const noexcept {
|
||||||
for(int i = 0; i < _n * 5; i++)
|
for(int i = 0; i < _n * 5; i++)
|
||||||
if(i == 0)
|
if(i == 0)
|
||||||
std::cout << "┌";
|
std::cout << "┌";
|
||||||
|
|
|
@ -24,12 +24,12 @@ class Univers {
|
||||||
// Ajoute des animaux à l'univers
|
// Ajoute des animaux à l'univers
|
||||||
void ajoutAnimaux(std::vector<Animal*>);
|
void ajoutAnimaux(std::vector<Animal*>);
|
||||||
|
|
||||||
/* Ajoute un organisme
|
/* Modifie un organisme
|
||||||
* Attention, écrase l'organisme précédent */
|
* Attention, écrase l'organisme précédent */
|
||||||
void ajoutOrganisme(Organisme *, int);
|
void modificationOrganisme(Organisme *, int);
|
||||||
|
|
||||||
// Affiche l'univers à l'instant présent
|
// 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
|
// Vérifie s'il y a de la vie dans l'univers
|
||||||
bool enVie(void) const noexcept;
|
bool enVie(void) const noexcept;
|
||||||
|
|
Reference in a new issue