Modifications
- Suppression du plateau, tout est stocké dans un vecteur lié à l'ID d'un univers - Suppression de la méthode placant les animaux dans l'univers, ils s'insèrent maintenant directement grâce à leur constructeur - L'affichage se base désormais sur le vecteur en récréant un plateau
This commit is contained in:
parent
be2d39ee8c
commit
4929d5a997
2 changed files with 27 additions and 19 deletions
|
@ -21,6 +21,8 @@ class Univers {
|
||||||
* - les organismes présent dans l'univers */
|
* - les organismes présent dans l'univers */
|
||||||
inline static std::map<int, std::pair<std::vector<int>, std::vector<Organisme*>>> listeUnivers;
|
inline static std::map<int, std::pair<std::vector<int>, std::vector<Organisme*>>> listeUnivers;
|
||||||
|
|
||||||
|
inline static std::map<int, std::pair<int, int>> dimensionsUnivers; // Dimensions de l'univers (largeur, longueur)
|
||||||
|
|
||||||
inline static int __totalID; // s'incrémente à chaque création d'univers
|
inline static int __totalID; // s'incrémente à chaque création d'univers
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
|
@ -1,39 +1,38 @@
|
||||||
#include "../includes/univers.hpp"
|
#include "../includes/univers.hpp"
|
||||||
#include "../includes/herbe.hpp"
|
#include "../includes/herbe.hpp"
|
||||||
|
|
||||||
Univers::Univers(int longueur, int largeur): _m(longueur), _n(largeur), _tailleUnivers(longueur * largeur), _tour(0), ID(__totalID + 1) {
|
Univers::Univers(int longueur, int largeur): _m(longueur),
|
||||||
|
_n(largeur),
|
||||||
|
_tailleUnivers(longueur * largeur),
|
||||||
|
_tour(0),
|
||||||
|
ID(__totalID + 1) {
|
||||||
__totalID = ID; // + 1 aux ID
|
__totalID = ID; // + 1 aux ID
|
||||||
|
|
||||||
// Initialisation du plateau avec que des 0
|
|
||||||
_plateau = new int[_tailleUnivers]();
|
|
||||||
|
|
||||||
// Stocke tous les index libres du plateau
|
|
||||||
std::vector<int> indexLibres;
|
|
||||||
|
|
||||||
// On ajoute tous les index possibles car pour l'instant le plateau est vide
|
// On ajoute tous les index possibles car pour l'instant le plateau est vide
|
||||||
for(int i = 0; i < _tailleUnivers; i++)
|
for(int i = 0; i < _tailleUnivers; i++)
|
||||||
indexLibres.push_back(i);
|
listeUnivers[ID].first.push_back(i);
|
||||||
|
|
||||||
// On mélange notre vecteur d'index non occupés
|
// On mélange notre vecteur d'index non occupés
|
||||||
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(listeUnivers[ID].first.begin(), listeUnivers[ID].first.end(), graine);
|
||||||
|
|
||||||
// Remplie quelques valeurs du tableau avec de l'herbe
|
// Remplie quelques valeurs du tableau avec de l'herbe
|
||||||
for(int i = indexLibres.back(); indexLibres.size() > (uint64_t)_tailleUnivers - _tailleUnivers / 2; indexLibres.pop_back())
|
while(listeUnivers[ID].first.size() > (uint64_t)_tailleUnivers - _tailleUnivers / 2) {
|
||||||
_plateau[indexLibres.back()] = Herbe(ID, i / _n, i % _n).ID;
|
new Herbe(ID, listeUnivers[ID].first.back());
|
||||||
|
listeUnivers[ID].first.pop_back();
|
||||||
|
}
|
||||||
|
|
||||||
/* On stocke notre vecteur contenant nos index libres
|
// On stocke les dimensions pour chaque univers dans une map
|
||||||
* dans la liste des univers, en l'associant à notre
|
dimensionsUnivers[ID] = std::make_pair(largeur, longueur);
|
||||||
* ID unique d'univers */
|
|
||||||
listeUnivers[ID].first = indexLibres;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Univers::~Univers(void) {
|
Univers::~Univers(void) {
|
||||||
delete[] _plateau; // on détruit notre plateau
|
for(auto it: listeUnivers[ID].second)
|
||||||
|
delete it;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Univers::ajoutAnimaux(std::vector<Animal*> animaux) {
|
/* void Univers::ajoutAnimaux(std::vector<Animal*> animaux) {
|
||||||
if(animaux.size() > listeUnivers[ID].first.size()) // si il n'y a plus d'index de libres
|
if(animaux.size() > listeUnivers[ID].first.size()) // si il n'y a plus d'index de libres
|
||||||
throw std::domain_error("Trop d'organismes pour l'univers.");
|
throw std::domain_error("Trop d'organismes pour l'univers.");
|
||||||
|
|
||||||
|
@ -43,7 +42,7 @@ void Univers::ajoutAnimaux(std::vector<Animal*> animaux) {
|
||||||
animaux.pop_back(); // on retire l'animal du vecteur
|
animaux.pop_back(); // on retire l'animal du vecteur
|
||||||
listeUnivers[ID].first.pop_back(); // on retire l'index du vecteur
|
listeUnivers[ID].first.pop_back(); // on retire l'index du vecteur
|
||||||
}
|
}
|
||||||
}
|
} */
|
||||||
|
|
||||||
/* void Univers::modificationOrganisme(Organisme * organisme, int index) {
|
/* void Univers::modificationOrganisme(Organisme * organisme, int index) {
|
||||||
if(index > _tailleUnivers)
|
if(index > _tailleUnivers)
|
||||||
|
@ -70,6 +69,11 @@ void Univers::ajoutAnimaux(std::vector<Animal*> animaux) {
|
||||||
} */
|
} */
|
||||||
|
|
||||||
void Univers::affichage(void) const noexcept {
|
void Univers::affichage(void) const noexcept {
|
||||||
|
// On génère le plateau pour l'affichage
|
||||||
|
int * plateau = new int[_tailleUnivers]();
|
||||||
|
for(auto it: listeUnivers[ID].second)
|
||||||
|
plateau[it->position(ID).first] = it->ID;
|
||||||
|
|
||||||
for(int i = 0; i < _n * 4; i++)
|
for(int i = 0; i < _n * 4; i++)
|
||||||
if(i == 0)
|
if(i == 0)
|
||||||
std::cout << "┌"; // coin supérieur gauche
|
std::cout << "┌"; // coin supérieur gauche
|
||||||
|
@ -80,7 +84,7 @@ void Univers::affichage(void) const noexcept {
|
||||||
std::cout << "│ "; // premier côté gauche
|
std::cout << "│ "; // premier côté gauche
|
||||||
for(int i = 0; i < _tailleUnivers; i += _n) {
|
for(int i = 0; i < _tailleUnivers; i += _n) {
|
||||||
for(int j = 0; j < _n; j++) {
|
for(int j = 0; j < _n; j++) {
|
||||||
std::cout << Organisme::lettre(_plateau[i + j]);
|
std::cout << Organisme::lettre(plateau[i + j]);
|
||||||
if(j == _n - 1)
|
if(j == _n - 1)
|
||||||
std::cout << " │ "; // côté droit
|
std::cout << " │ "; // côté droit
|
||||||
else
|
else
|
||||||
|
@ -96,6 +100,8 @@ void Univers::affichage(void) const noexcept {
|
||||||
else
|
else
|
||||||
std::cout << "─"; // bas
|
std::cout << "─"; // bas
|
||||||
std::cout << "┘" << std::endl; // coin inférieur droit
|
std::cout << "┘" << std::endl; // coin inférieur droit
|
||||||
|
|
||||||
|
delete[] plateau;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Univers::enVie(void) const noexcept {
|
bool Univers::enVie(void) const noexcept {
|
||||||
|
|
Reference in a new issue