From d4c87677b360ddd8839b5a3d8389432432791e02 Mon Sep 17 00:00:00 2001 From: Anthony Noir <anthony.noir@etu.utc.fr> Date: Fri, 11 Jun 2021 23:03:32 +0200 Subject: [PATCH] =?UTF-8?q?p=C3=A9riodicit=C3=A9=20avec=20modification=20m?= =?UTF-8?q?anuelle?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- include/grid.h | 2 +- include/simulation.hpp | 5 +++-- src/grid.cpp | 2 +- src/interface.cpp | 4 ++-- src/simulation.cpp | 8 +++----- 5 files changed, 10 insertions(+), 11 deletions(-) diff --git a/include/grid.h b/include/grid.h index 7964252..520f544 100644 --- a/include/grid.h +++ b/include/grid.h @@ -107,7 +107,7 @@ public: Grid& operator=(const Grid& g); //! \brief Vérifie si deux grilles sont identiques - bool operator==(const Grid&); + bool operator==(const Grid&) const; //! \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; diff --git a/include/simulation.hpp b/include/simulation.hpp index 1bc710e..2176ca4 100644 --- a/include/simulation.hpp +++ b/include/simulation.hpp @@ -18,7 +18,7 @@ class Simulation { private: bool canRun; unsigned int time; - unsigned int period; + int period; Automaton automaton; Grid startGrid; History hist; @@ -89,8 +89,9 @@ public: //! \brief Donne la période de la simulation //! //! Si elle n'est pas encore obtenue : vaut 0 + //! Si elle ne pourra jamais l'être : vaut -1 (s'il y a eu une modification de la grille en cours d'éxécution) //! \return période de la simulation - unsigned int getPeriod() {return period;} + int getPeriod() {return period;} //! \brief Indique l'étape actuelle de la simulation //! \return nombre de pas depuis le début diff --git a/src/grid.cpp b/src/grid.cpp index 63111a1..4134229 100644 --- a/src/grid.cpp +++ b/src/grid.cpp @@ -44,7 +44,7 @@ Grid& Grid::operator=(const Grid& g){ return *this; } -bool Grid::operator==(const Grid & G) { +bool Grid::operator==(const Grid & G) const { return nb_rows==G.nb_rows && nb_col==G.nb_col && matrix==G.matrix; } diff --git a/src/interface.cpp b/src/interface.cpp index 09e673b..9f61965 100644 --- a/src/interface.cpp +++ b/src/interface.cpp @@ -942,7 +942,7 @@ void MainWindow::on_nextButton_clicked() simulation.setGrid(ui->grid_view->get_grid()); simulation.step(); ui->grid_view->copy_grid(simulation.getGrid()); - ui->stepsPeriodLabel->setText(QString::number(simulation.getPeriod())+" steps"); + ui->stepsPeriodLabel->setText(simulation.getPeriod()!=-1?QString::number(simulation.getPeriod())+" steps":"none"); ui->nbStepsLabel->setText(QString::number(simulation.getTime())+" steps"); if(simulation.frozen()) { ui->simStatusLabel->setText("Status : frozen"); @@ -955,7 +955,7 @@ void MainWindow::on_prevButton_clicked() QMessageBox::warning(this, "Unable to step back", "Empty history : unable to step back"); } ui->grid_view->copy_grid(simulation.getGrid()); - ui->nbStepsLabel->setText(QString::number(simulation.getTime())+" steps"); + ui->nbStepsLabel->setText(simulation.getPeriod()!=-1?QString::number(simulation.getPeriod())+" steps":"none"); } void MainWindow::on_playPauseButton_clicked() diff --git a/src/simulation.cpp b/src/simulation.cpp index 04c06be..897827f 100644 --- a/src/simulation.cpp +++ b/src/simulation.cpp @@ -34,6 +34,8 @@ void Simulation::setGrid(const Grid & grid) { hist = History(hist.get_nbMax()); } else if((grid.get_col() != automaton.getGrid().get_col())&&(grid.get_rows() != automaton.getGrid().get_rows())) { return; + } else if(!(automaton.getGrid() == grid)) { //S'il y a modification manuelle de la grille pendant la simulation + period = -1; } automaton.setGrid(grid); } @@ -65,7 +67,6 @@ void Simulation::resize(size_t l,size_t c) { hist = History(hist.get_nbMax()); } -#include <QElapsedTimer> void Simulation::step() { if(!canRun) { return; @@ -73,13 +74,10 @@ void Simulation::step() { ++time; hist.pushGrid(automaton.getGrid()); - QElapsedTimer t; - t.start(); automaton.runOnce(); - qDebug() << t.elapsed(); automaton.getNeighborhoodRule()->update_generation(time); - if(!period && startGrid == automaton.getGrid()) { + if(period==0 && startGrid == automaton.getGrid()) { period = time; } } -- GitLab