tentative de setPattern
This commit is contained in:
parent
0571b483f8
commit
32abf070d0
@ -323,10 +323,60 @@ 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)
|
||||||
{
|
{
|
||||||
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;
|
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.
|
//! \brief Mutateur remplissant la grille par le patron passé en argument.
|
||||||
//!
|
//!
|
||||||
//! \details Cette fonction est une surcharge utilitaire de la fonction
|
//! \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
|
// TODO
|
||||||
bool GOLTeamH::setFromPattern(std::string const& pattern)
|
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;
|
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.
|
//! \brief Mutateur modifiant la couleur d'un état.
|
||||||
//!
|
//!
|
||||||
//! \details Cette fonction modifie la couleur d'un état.
|
//! \details Cette fonction modifie la couleur d'un état.
|
||||||
|
@ -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
|
||||||
|
Loading…
Reference in New Issue
Block a user