Commit 12c9e357 authored by Anthony Noir's avatar Anthony Noir
Browse files

Gestion période

parent 3a2516b1
Pipeline #79251 canceled with stage
...@@ -66,6 +66,7 @@ public: ...@@ -66,6 +66,7 @@ public:
+((j%nb_col+nb_col)%nb_col)]; +((j%nb_col+nb_col)%nb_col)];
} }
Grid& operator=(const Grid& g); Grid& operator=(const Grid& g);
bool operator==(const Grid&);
//! \brief Retourne une structure représentant le contenu non-nul de la Grid (les cellules d'état != 0), pour un enregistrement dans un fichier par exemple. //! \brief Retourne une structure représentant le contenu non-nul de la Grid (les cellules d'état != 0), pour un enregistrement dans un fichier par exemple.
Structure to_structure() const; Structure to_structure() const;
......
...@@ -16,7 +16,8 @@ Cette classe représente un automate cellulaire dans le temps. ...@@ -16,7 +16,8 @@ Cette classe représente un automate cellulaire dans le temps.
class Simulation { class Simulation {
private: private:
bool canRun; bool canRun;
int time; unsigned int time;
unsigned int period;
Automaton automaton; Automaton automaton;
Grid startGrid; Grid startGrid;
History hist; History hist;
...@@ -78,6 +79,15 @@ public: ...@@ -78,6 +79,15 @@ public:
//! \return vrai si la simulation peut tourner //! \return vrai si la simulation peut tourner
bool runnable() {return canRun;} bool runnable() {return canRun;}
//! \brief Donne la période de la simulation
//!
//! Si elle n'est pas encore obtenue : vaut 0
//! \return période de la simulation
unsigned int getPeriod() {return period;}
//! \brief Indique l'étape actuelle de la simulation
//! \return nombre de pas depuis le début
unsigned int getTime() {return time;}
//! \brief Remet la simulation dans son état de départ //! \brief Remet la simulation dans son état de départ
......
...@@ -47,6 +47,10 @@ Grid& Grid::operator=(const Grid& g){ ...@@ -47,6 +47,10 @@ Grid& Grid::operator=(const Grid& g){
return *this; return *this;
} }
bool Grid::operator==(const Grid & G) {
return nb_rows==G.nb_rows && nb_col==G.nb_col && matrix==G.matrix;
}
Structure Grid::to_structure() const Structure Grid::to_structure() const
{ {
std::vector<std::pair<Coord, unsigned>> data; std::vector<std::pair<Coord, unsigned>> data;
......
...@@ -618,6 +618,7 @@ void MainWindow::on_nextButton_clicked() ...@@ -618,6 +618,7 @@ void MainWindow::on_nextButton_clicked()
simulation.setGrid(ui->grid_view->get_grid()); simulation.setGrid(ui->grid_view->get_grid());
simulation.step(); simulation.step();
ui->grid_view->copy_grid(simulation.getGrid()); ui->grid_view->copy_grid(simulation.getGrid());
ui->stepsPeriodLabel->setText(QString::number(simulation.getPeriod())+" steps");
} }
void MainWindow::on_prevButton_clicked() void MainWindow::on_prevButton_clicked()
...@@ -653,6 +654,7 @@ void MainWindow::on_resetButton_clicked() { ...@@ -653,6 +654,7 @@ void MainWindow::on_resetButton_clicked() {
} }
simulation.reset(); simulation.reset();
ui->grid_view->copy_grid(simulation.getGrid()); ui->grid_view->copy_grid(simulation.getGrid());
ui->stepsPeriodLabel->setText(QString::number(simulation.getPeriod())+" steps");
} }
void MainWindow::on_recordSpinBox_valueChanged(int newSize) { void MainWindow::on_recordSpinBox_valueChanged(int newSize) {
......
#include "simulation.hpp" #include "simulation.hpp"
Simulation::Simulation() : canRun(false), time(0), automaton(), startGrid(0,0), hist(10) {} Simulation::Simulation() : canRun(false), time(0), period(0), automaton(), startGrid(0,0), hist(10) {}
Simulation::~Simulation() {} Simulation::~Simulation() {}
...@@ -61,7 +61,8 @@ void Simulation::resize(size_t l,size_t c) { ...@@ -61,7 +61,8 @@ void Simulation::resize(size_t l,size_t c) {
void Simulation::reset() { void Simulation::reset() {
automaton.setGrid(startGrid); automaton.setGrid(startGrid);
time = 0; time = 0;
hist = History(10); period = 0;
hist = History(hist.get_nbMax());
} }
void Simulation::step() { void Simulation::step() {
...@@ -69,6 +70,9 @@ void Simulation::step() { ...@@ -69,6 +70,9 @@ void Simulation::step() {
automaton.runOnce(); automaton.runOnce();
automaton.getNeighborhoodRule()->step(); automaton.getNeighborhoodRule()->step();
++time; ++time;
if(!period && startGrid == automaton.getGrid()) {
period = time;
}
} }
bool Simulation::back() { bool Simulation::back() {
......
Supports Markdown
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