tentative de setPattern

This commit is contained in:
Martin Euzenat 2024-01-24 23:48:10 -05:00
parent 0571b483f8
commit 32abf070d0
2 changed files with 105 additions and 2 deletions

View File

@ -323,8 +323,58 @@ void GOLTeamH::randomize(double percentAlive)
// TODO // TODO
bool GOLTeamH::setFromPattern(std::string const& pattern, int centerX, int centerY) bool GOLTeamH::setFromPattern(std::string const& pattern, int centerX, int centerY)
{ {
// Analyse du pattern
size_t pos = 0;
// Vérification du '[' initial
if (pattern[pos++] != '[') {
std::cerr << "Erreur de format : '[' manquant." << std::endl;
return false;
}
// Lecture de la largeur
size_t width = std::stoi(pattern.substr(pos), &pos);
if (width <= 0) {
std::cerr << "Erreur de format : Largeur invalide." << std::endl;
return false;
}
// Vérification du 'x'
if (pattern[pos++] != 'x') {
std::cerr << "Erreur de format : 'x' manquant." << std::endl;
return false;
}
// Lecture de la hauteur
size_t height = std::stoi(pattern.substr(pos), &pos);
if (height <= 0) {
std::cerr << "Erreur de format : Hauteur invalide." << std::endl;
return false;
}
// Vérification du ']'
if (pattern[pos++] != ']') {
std::cerr << "Erreur de format : ']' manquant." << std::endl;
return false;
}
// Vérification de la taille du reste du pattern
if (pattern.length() - pos != width * height) {
std::cerr << "Erreur de format : Taille du patron incorrecte." << std::endl;
return false;
}
// Remplissage de la grille aux positions spécifiées par le patron
for (size_t y = 0; y < height; ++y) {
for (size_t x = 0; x < width; ++x) {
char cellChar = pattern[pos++];
State cellState = (cellChar == '0') ? State::dead : State::alive;
mData.setAt(centerX + x, centerY + y, cellState);
}
}
return true;
mIteration = 0; mIteration = 0;
return false;
} }
//! \brief Mutateur remplissant la grille par le patron passé en argument. //! \brief Mutateur remplissant la grille par le patron passé en argument.
@ -341,8 +391,59 @@ bool GOLTeamH::setFromPattern(std::string const& pattern, int centerX, int cente
// TODO // TODO
bool GOLTeamH::setFromPattern(std::string const& pattern) bool GOLTeamH::setFromPattern(std::string const& pattern)
{ {
// Analyse du pattern
size_t pos = 0;
// Vérification du '[' initial
if (static_cast<char>(pattern[pos++]) != '[') {
std::cerr << "Erreur de format : '[' manquant." << std::endl;
return false;
}
// Lecture de la largeur
size_t width = std::stoi(pattern.substr(pos), &pos);
if (width <= 0) {
std::cerr << "Erreur de format : Largeur invalide." << std::endl;
return false;
}
pos++;
if (pattern[pos++] != 120 ) {
std::cerr << "Erreur de format : 'x' manquant." << std::endl;
return false;
}
pos++;
// Lecture de la hauteur
size_t height = std::stoi(pattern.substr(pos), &pos);
if (height <= 0) {
std::cerr << "Erreur de format : Hauteur invalide." << std::endl;
return false;
}
pos++;
// Vérification du ']'
if (static_cast<char>(pattern[pos++]) != ']') {
std::cerr << "Erreur de format : ']' manquant." << std::endl;
return false;
}
pos++;
// Vérification de la taille du reste du pattern
if (pattern.length() - pos != width * height) {
std::cerr << "Erreur de format : Taille du patron incorrecte." << std::endl;
return false;
}
size_t centerX = mData.width() / 2;
size_t centerY = mData.height() / 2;
// Remplissage de la grille aux positions spécifiées par le patron
for (size_t y = 0; y < height; ++y) {
for (size_t x = 0; x < width; ++x) {
char cellChar = pattern[pos++];
State cellState = (cellChar == '0') ? State::dead : State::alive;
mData.setAt(centerX + x, centerY + y, cellState);
}
}
return true;
mIteration = 0; mIteration = 0;
return false;
} }
//! \brief Mutateur modifiant la couleur d'un état. //! \brief Mutateur modifiant la couleur d'un état.

View File

@ -7,6 +7,8 @@
#include <optional> #include <optional>
#include <GOL.h> #include <GOL.h>
#include "GridTeamH.h" #include "GridTeamH.h"
#include <iostream>
#include <vector>
// Fichier : GridTeam.h // Fichier : GridTeam.h
// GPA675 Laboratoire 1 // GPA675 Laboratoire 1