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::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 << "┌";
|
||||
|
|
|
@ -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;
|
||||
|
|
Reference in a new issue