tentative de setPattern
This commit is contained in:
parent
0571b483f8
commit
32abf070d0
@ -323,10 +323,60 @@ void GOLTeamH::randomize(double percentAlive)
|
||||
// TODO
|
||||
bool GOLTeamH::setFromPattern(std::string const& pattern, int centerX, int centerY)
|
||||
{
|
||||
mIteration = 0;
|
||||
// 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;
|
||||
}
|
||||
|
||||
//! \brief Mutateur remplissant la grille par le patron passé en argument.
|
||||
//!
|
||||
//! \details Cette fonction est une surcharge utilitaire de la fonction
|
||||
@ -341,10 +391,61 @@ bool GOLTeamH::setFromPattern(std::string const& pattern, int centerX, int cente
|
||||
// TODO
|
||||
bool GOLTeamH::setFromPattern(std::string const& pattern)
|
||||
{
|
||||
mIteration = 0;
|
||||
// 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;
|
||||
}
|
||||
|
||||
//! \brief Mutateur modifiant la couleur d'un état.
|
||||
//!
|
||||
//! \details Cette fonction modifie la couleur d'un état.
|
||||
|
@ -7,6 +7,8 @@
|
||||
#include <optional>
|
||||
#include <GOL.h>
|
||||
#include "GridTeamH.h"
|
||||
#include <iostream>
|
||||
#include <vector>
|
||||
|
||||
// Fichier : GridTeam.h
|
||||
// GPA675 – Laboratoire 1
|
||||
|
Loading…
Reference in New Issue
Block a user