diff --git a/GPA675Lab1GOL/GOLTeamH.cpp b/GPA675Lab1GOL/GOLTeamH.cpp index 9689f93..a61f7ea 100644 --- a/GPA675Lab1GOL/GOLTeamH.cpp +++ b/GPA675Lab1GOL/GOLTeamH.cpp @@ -220,7 +220,30 @@ bool GOLTeamH::setRule(std::string const& rule) //! **grille**. void GOLTeamH::setBorderManagement(BorderManagement borderManagement) { - mBorderManagement = borderManagement; + mBorderManagement = borderManagement; // On assigne la nouvelle stratégie + // Logique spécifique à chaque stratégie de gestion de bord + switch (borderManagement) + { + case BorderManagement::immutableAsIs: + // Aucune action nécessaire, les cellules du contour restent inchangées + break; + + case BorderManagement::foreverDead: + mData.setBorderValue(State::dead); + break; + + case BorderManagement::foreverAlive: + mData.setBorderValue(State::alive); + break; + + case BorderManagement::warping: + + break; + + case BorderManagement::mirror: + + break; + } } diff --git a/GPA675Lab1GOL/GridTeamH.cpp b/GPA675Lab1GOL/GridTeamH.cpp index 6aec5fb..c7f0871 100644 --- a/GPA675Lab1GOL/GridTeamH.cpp +++ b/GPA675Lab1GOL/GridTeamH.cpp @@ -133,3 +133,22 @@ void GridTeamH::randomize(double percentAlive) i = CellType::dead; } } + +//Fonction qui attribue CellType aux case de la grille présent en bordure +//sans changer les autres case +void GridTeamH::setBorderValue(CellType initValue) +{ + + // Boucle pour parcourir chaque ligne de la grille + for (size_t row = 0; row < mHeight; row++) { + // Boucle pour parcourir chaque colonne de la grille + for (size_t col = 0; col < mWidth; col++) { + // Calcul de l'index dans la grille bidimensionnelle + size_t index = row * mWidth + col; + + // Alternance de la valeur pour chaque cellule en fonction de la ligne et de la colonne + if (row == 0 || row == mHeight - 1 || col == 0 || col == mWidth - 1) + mData[index] = initValue; + } + } +} diff --git a/GPA675Lab1GOL/GridTeamH.h b/GPA675Lab1GOL/GridTeamH.h index d8308bd..792143d 100644 --- a/GPA675Lab1GOL/GridTeamH.h +++ b/GPA675Lab1GOL/GridTeamH.h @@ -49,10 +49,11 @@ public: void fillAternately(CellType initValue); void randomize(double percentAlive); -private: // - DataType mData; // Il y a des attributs essentiels au fonctionnement de cette classe. - size_t mWidth, mHeight; // À vous de les déterminer. - // Pour la génération de nombres aléatoires + void setBorderValue(CellType value); + +private: + DataType mData; + size_t mWidth, mHeight; //hauteur et largeur de la grid std::random_device mRandomDevice; std::mt19937 mEngine; std::uniform_real_distribution<> mDistribution;