Commit d4c87677 authored by Anthony Noir's avatar Anthony Noir
Browse files

périodicité avec modification manuelle

parent c2d21c8e
......@@ -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;
......
......@@ -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
......
......@@ -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;
}
......
......@@ -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()
......
......@@ -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;
}
}
......
Markdown is supported
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