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 */
|
||||
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
|
||||
|
||||
public:
|
||||
|
|
|
@ -1,39 +1,38 @@
|
|||
#include "../includes/univers.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
|
||||
|
||||
// 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
|
||||
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
|
||||
std::random_device 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
|
||||
for(int i = indexLibres.back(); indexLibres.size() > (uint64_t)_tailleUnivers - _tailleUnivers / 2; indexLibres.pop_back())
|
||||
_plateau[indexLibres.back()] = Herbe(ID, i / _n, i % _n).ID;
|
||||
while(listeUnivers[ID].first.size() > (uint64_t)_tailleUnivers - _tailleUnivers / 2) {
|
||||
new Herbe(ID, listeUnivers[ID].first.back());
|
||||
listeUnivers[ID].first.pop_back();
|
||||
}
|
||||
|
||||
/* On stocke notre vecteur contenant nos index libres
|
||||
* dans la liste des univers, en l'associant à notre
|
||||
* ID unique d'univers */
|
||||
listeUnivers[ID].first = indexLibres;
|
||||
// On stocke les dimensions pour chaque univers dans une map
|
||||
dimensionsUnivers[ID] = std::make_pair(largeur, longueur);
|
||||
}
|
||||
|
||||
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
|
||||
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
|
||||
listeUnivers[ID].first.pop_back(); // on retire l'index du vecteur
|
||||
}
|
||||
}
|
||||
} */
|
||||
|
||||
/* void Univers::modificationOrganisme(Organisme * organisme, int index) {
|
||||
if(index > _tailleUnivers)
|
||||
|
@ -70,6 +69,11 @@ void Univers::ajoutAnimaux(std::vector<Animal*> animaux) {
|
|||
} */
|
||||
|
||||
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++)
|
||||
if(i == 0)
|
||||
std::cout << "┌"; // coin supérieur gauche
|
||||
|
@ -80,7 +84,7 @@ void Univers::affichage(void) const noexcept {
|
|||
std::cout << "│ "; // premier côté gauche
|
||||
for(int i = 0; i < _tailleUnivers; i += _n) {
|
||||
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)
|
||||
std::cout << " │ "; // côté droit
|
||||
else
|
||||
|
@ -96,6 +100,8 @@ void Univers::affichage(void) const noexcept {
|
|||
else
|
||||
std::cout << "─"; // bas
|
||||
std::cout << "┘" << std::endl; // coin inférieur droit
|
||||
|
||||
delete[] plateau;
|
||||
}
|
||||
|
||||
bool Univers::enVie(void) const noexcept {
|
||||
|
|
Reference in a new issue