Sépare les index libres pour les animaux du reste pour bien avoir m * n cases dispos
This commit is contained in:
parent
ed2bfbb2a3
commit
bc629b2374
4 changed files with 45 additions and 20 deletions
|
@ -20,11 +20,8 @@ class Organisme {
|
|||
public:
|
||||
const int ID; // ID unique pour chaque organisme
|
||||
|
||||
// ID de l'Univers, index dans l'univers
|
||||
Organisme(int, int);
|
||||
|
||||
// ID de l'Univers (index aléatoire)
|
||||
Organisme(int);
|
||||
// ID de l'Univers, type de l'organisme, index dans l'univers
|
||||
Organisme(int, bool = true, int = -1);
|
||||
|
||||
virtual ~Organisme(void);
|
||||
|
||||
|
|
|
@ -1,13 +1,13 @@
|
|||
#include "../includes/animal.hpp"
|
||||
|
||||
Animal::Animal(const int univers_ID, const int index, const int age_max,
|
||||
const int faim_max, const int p_vitesse): Organisme(univers_ID, index),
|
||||
const int faim_max, const int p_vitesse): Organisme(univers_ID, false, index),
|
||||
m_age_max(age_max),
|
||||
m_faim_max(faim_max),
|
||||
vitesse(p_vitesse) { }
|
||||
|
||||
Animal::Animal(const int univers_ID, const int age_max,
|
||||
const int faim_max, const int p_vitesse): Organisme(univers_ID),
|
||||
const int faim_max, const int p_vitesse): Organisme(univers_ID, false),
|
||||
m_age_max(age_max),
|
||||
m_faim_max(faim_max),
|
||||
vitesse(p_vitesse) { }
|
||||
|
|
|
@ -1,24 +1,50 @@
|
|||
#include "../includes/univers.hpp"
|
||||
#include "../includes/organisme.hpp"
|
||||
|
||||
Organisme::Organisme(const int univers_ID, const int index): m_univers_ID(univers_ID), m_index(index), ID(m_total_ID + 1) {
|
||||
if(Univers::m_index_libres_univers[m_univers_ID].first.size() == 0) { // si il n'y a plus d'index de libres
|
||||
throw std::domain_error("Trop d'organismes pour l'univers.");
|
||||
Organisme::Organisme(const int univers_ID, const bool superposable, const int index): m_univers_ID(univers_ID), m_index(index), ID(m_total_ID + 1) {
|
||||
// S'il n'y a plus d'index de libres
|
||||
if(superposable) {
|
||||
if(Univers::m_index_libres_univers[m_univers_ID].first.size() == 0) {
|
||||
throw std::domain_error("Trop d'organismes \"superposable\" dans l'univers.");
|
||||
}
|
||||
} else {
|
||||
if(Univers::m_index_libres_univers[m_univers_ID].second.size() == 0) {
|
||||
throw std::domain_error("Trop d'organismes \"non-superposable\" dans l'univers.");
|
||||
}
|
||||
}
|
||||
m_total_ID = ID; // + 1 aux ID
|
||||
|
||||
// Ajoute l'organisme à la liste des organismes de l'univers
|
||||
Univers::m_organismes_univers[m_univers_ID].push_back(this);
|
||||
|
||||
// Supprime l'index maintenant pris par un organisme
|
||||
auto debut = Univers::m_index_libres_univers[m_univers_ID].first.begin();
|
||||
auto fin = Univers::m_index_libres_univers[m_univers_ID].first.end();
|
||||
auto it = std::find(debut, fin, index);
|
||||
if(it != fin) {
|
||||
Univers::m_index_libres_univers[m_univers_ID].first.erase(it);
|
||||
// Assigne un index à l'organisme dans l'univers
|
||||
if(superposable) {
|
||||
if(index == -1) { // aléatoire si non-renseigné
|
||||
m_index = Univers::m_index_libres_univers[univers_ID].first.back();
|
||||
}
|
||||
|
||||
// Retire l'index de la liste des index libres (superposable)
|
||||
auto debut = Univers::m_index_libres_univers[m_univers_ID].first.begin();
|
||||
auto fin = Univers::m_index_libres_univers[m_univers_ID].first.end();
|
||||
auto it = std::find(debut, fin, m_index);
|
||||
if(it != fin) {
|
||||
Univers::m_index_libres_univers[m_univers_ID].first.erase(it);
|
||||
}
|
||||
} else {
|
||||
if(index == -1) { // aléatoire si non-renseigné
|
||||
m_index = Univers::m_index_libres_univers[univers_ID].second.back();
|
||||
}
|
||||
|
||||
// Retire l'index de la liste des index libres (non-superposable)
|
||||
auto debut = Univers::m_index_libres_univers[m_univers_ID].second.begin();
|
||||
auto fin = Univers::m_index_libres_univers[m_univers_ID].second.end();
|
||||
auto it = std::find(debut, fin, m_index);
|
||||
if(it != fin) {
|
||||
Univers::m_index_libres_univers[m_univers_ID].second.erase(it);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Organisme::Organisme(const int univers_ID): Organisme(univers_ID, Univers::m_index_libres_univers[univers_ID].first.back()) {}
|
||||
|
||||
Organisme::~Organisme(void) {
|
||||
// On remet notre index dans le vecteur des index vide
|
||||
Univers::m_index_libres_univers[m_univers_ID].first.push_back(m_index);
|
||||
|
|
|
@ -7,13 +7,15 @@ Univers::Univers(const int longueur, const int largeur): m_longueur(longueur),
|
|||
ID(m_total_ID + 1) {
|
||||
m_total_ID = ID; // + 1 aux ID
|
||||
|
||||
// On ajoute tous les index possibles car pour l'instant le plateau est vide
|
||||
// On ajoute tous les index possibles car pour l'instant car le plateau est vide
|
||||
for(int i = 0; i < m_taille_univers; ++i) {
|
||||
m_index_libres_univers[ID].first.push_back(i);
|
||||
m_index_libres_univers[ID].second.push_back(i);
|
||||
}
|
||||
|
||||
// On mélange notre vecteur d'index non occupés
|
||||
// On mélange nos vecteur d'index non occupés
|
||||
melange(&m_index_libres_univers[ID].first);
|
||||
melange(&m_index_libres_univers[ID].second);
|
||||
|
||||
// Remplie quelques valeurs du tableau avec de l'herbe
|
||||
while(m_index_libres_univers[ID].first.size() > static_cast<uint64_t>(m_taille_univers - m_taille_univers / 2)) {
|
||||
|
|
Reference in a new issue