Verified Commit b61ed35a authored by Romain De Laage De Bellefaye's avatar Romain De Laage De Bellefaye 🌳
Browse files

Doc réseau, cellule et état

parent c87c1566
...@@ -5,77 +5,118 @@ ...@@ -5,77 +5,118 @@
using namespace std; using namespace std;
/// Classe représentant la cellule
class Cellule{ class Cellule{
private: private:
unsigned int indEtat; unsigned int indEtat;
unsigned int abs; unsigned int abs;
unsigned int ord; unsigned int ord;
//inline Cellule():indEtat(0), abs(0), ord(0){}; //inline Cellule():indEtat(0), abs(0), ord(0){};
void initCellule(const unsigned int ind, const unsigned int &x, const unsigned int &y); void initCellule(const unsigned int ind, const unsigned int &x, const unsigned int &y);
friend class Reseau; friend class Reseau;
friend class RegleVoisinage; friend class RegleVoisinage;
friend class RegleVoisinageNeumann; friend class RegleVoisinageNeumann;
friend class RegleVoisinageMoore; friend class RegleVoisinageMoore;
friend class RegleVoisinageArbitraire; friend class RegleVoisinageArbitraire;
public: public:
inline unsigned int getIndEtat() const {return indEtat;} /// Obtenir l'indice de l'état correspondant à cette cellule
void incrementerEtat(); inline unsigned int getIndEtat() const {return indEtat;}
Cellule(); /// Incrémenter l'état de la cellule
Cellule(const Cellule& c): indEtat(c.indEtat), abs(c.abs), ord(c.ord) {} ///
/// Retourne à 0 quand on a atteint l'état maximal
void incrementerEtat();
/// Construire une cellule
Cellule();
/// Construire une cellule par recopie
Cellule(const Cellule& c): indEtat(c.indEtat), abs(c.abs), ord(c.ord) {}
}; };
/// Classe représentant un état
class Etat{ class Etat{
private: private:
unsigned int indice; unsigned int indice;
std::string label; std::string label;
QColor color; QColor color;
Etat(unsigned int ind, std::string lab, int r = 0, int g = 0, int b = 0): Etat(unsigned int ind, std::string lab, int r = 0, int g = 0, int b = 0):
indice(ind),label(lab),color(r,g,b){} indice(ind),label(lab),color(r,g,b){}
Etat(unsigned int ind, std::string lab, QColor col): Etat(unsigned int ind, std::string lab, QColor col):
indice(ind),label(lab),color(col){} //constructeur privé (l'utilisateur ne doit pas pouvoir créer un Etat par ce biais) indice(ind),label(lab),color(col){} //constructeur privé (l'utilisateur ne doit pas pouvoir créer un Etat par ce biais)
friend class EnsembleEtat; friend class EnsembleEtat;
public: public:
std::string getLabel(){return label;} /// Obtenir le label d'un état
QColor getColor(){return color;} std::string getLabel() const { return label; }
unsigned int getIndice() const { return indice; } /// Obtenir la couleur d'un état
QColor getColor() const { return color; }
/// Obtenir l'indice correspondant à un état
unsigned int getIndice() const { return indice; }
}; };
/// Regroupement cohérent d'états
class EnsembleEtat{
private:
size_t nbEtats = 0;
static const size_t nbEtatsMax = 10;
Etat* ensEtats[nbEtatsMax];
EnsembleEtat(const EnsembleEtat&) = delete;
EnsembleEtat operator=(const EnsembleEtat&) = delete;
class EnsembleEtat{ //singleton qui regroupe l'ensemble des états public:
private: //permet d'éviter que chaque cellule inclue une instance d'Etat EnsembleEtat();
size_t nbEtats = 0; ~EnsembleEtat();
static const size_t nbEtatsMax = 10; /// Ajouter un état à l'ensemble
Etat* ensEtats[nbEtatsMax]; /// @param[in] ind indice correspondant à l'état
EnsembleEtat(const EnsembleEtat&) = delete; /// @param[in] lab label correspondant à l'état
EnsembleEtat operator=(const EnsembleEtat&) = delete; /// @param[in] r niveau de rouge de la couleur de l'état
/// @param[in] g niveau de vert de la couleur de l'état
public: /// @param[in] b niveau de bleu de la couleur de l'état
EnsembleEtat(); void ajouterEtat(unsigned int ind, std::string lab,int r = 0, int g = 0, int b = 0);
~EnsembleEtat(); /// Supprimer un état par son indice
void ajouterEtat(unsigned int ind, std::string lab,int r = 0, int g = 0, int b = 0); /// @param[in] ind indice de l'état à supprimer
void supprimerEtat(const unsigned int ind); void supprimerEtat(const unsigned int ind);
void initEtat(const Etat* init_etats = nullptr);//initialisation du tableau d'Etats à partir d'un tableau externe /// Initialisation du tableau d'Etats à partir d'un tableau externe
Etat& getEtat(const unsigned int &ind){return *ensEtats[ind];} /// @param[in] init_etats tableau d'Etat
unsigned int getNbEtats() const {return nbEtats;}; void initEtat(const Etat* init_etats = nullptr);
void reset(); /// obtenir une référence vers un état par son indice
/// @param[in] ind indice de l'état à obtenir
Etat& getEtat(const unsigned int &ind) { return *ensEtats[ind]; }
/// Obtenir le nombre d'état disponibles
unsigned int getNbEtats() const { return nbEtats; }
/// Remettre à l'état vide l'ensemble
void reset();
}; };
/// Classe correspondant à un réseau d'une simulation
///
/// Un ensemble fini de cellules en 2 dimensions
class Reseau{ class Reseau{
private: private:
unsigned int hauteur; unsigned int hauteur;
unsigned int largeur; unsigned int largeur;
Cellule** reseau; Cellule** reseau;
public: public:
int getLargeur() const {return largeur;}; /// Obtenir la largeur du réseau
int getHauteur() const {return hauteur;}; int getLargeur() const { return largeur; }
Reseau& setAleatoire(); /// Obtenir la hauteur du réseau
Cellule** getReseau() const {return reseau;}; int getHauteur() const { return hauteur; }
Reseau(const unsigned int &h, const unsigned int &l); /// Remplir aléatoirement un réseau
Reseau(const Reseau&); Reseau& setAleatoire();
~Reseau(); /// Obtenir le tableau de cellules du réseau
Reseau& operator=(const Reseau& r); Cellule** getReseau() const { return reseau; }
bool operator==(const Reseau&r); /// Construire un réseau
/// @param[in] h Hauteur du réseau
/// @param[in] l Largeur du réseau
Reseau(const unsigned int &h, const unsigned int &l);
/// Construire un réseau par recopie d'un autre
/// @param[in] r Réseau à recopier
Reseau(const Reseau& r);
~Reseau();
/// copier un réseau dans un autre existant
/// @param[in] r Réseau à recopier
Reseau& operator=(const Reseau& r);
/// Comparer deux réseaux pour vérifier une égalité
/// @param[in] r Réseau à comparer
bool operator==(const Reseau& r);
}; };
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment