Commit 84bc92ab authored by Yann Boucher's avatar Yann Boucher
Browse files
parents b9fd4df4 bf138d20
Pipeline #79695 passed with stages
in 17 seconds
# Cellulut LO21
Application développée dans le cadre de l’UV LO21 permet de répondre à la problématique de simulation d’automates.
## Sommaire
- [Pour commencer](#pour-commencer)
- [Installation](#installation)
- [](#)
- [](#)
- [](#)
- [](#)
- [](#)
- [](#)
- [](#)
- [](#)
- [](#)
- [](#)
- [Glossaire](#glossaire)
## Pour commencer
Avoir une version de **QtCreator** d'au moins 5.12.
### Installation
Dans votre répétoire faire: `$ git clone https://gitlab.utc.fr/lo21_pin_noir_boucher_bouri_detree/cellulutlo21.git`
## Démarrage
Dites comment faire pour lancer votre projet
## Fabriqué avec
Entrez les programmes/logiciels/ressources que vous avez utilisé pour développer votre projet
_exemples :_
* [Materialize.css](http://materializecss.com) - Framework CSS (front-end)
* [Atom](https://atom.io/) - Editeur de textes
## Contributing
Si vous souhaitez contribuer, lisez le fichier [CONTRIBUTING.md](https://example.org) pour savoir comment le faire.
## Versions
Listez les versions ici
_exemple :_
**Dernière version stable :** 5.0
**Dernière version :** 5.1
Liste des versions : [Cliquer pour afficher](https://github.com/your/project-name/tags)
_(pour le lien mettez simplement l'URL de votre projets suivi de ``/tags``)_
## Auteurs
Listez le(s) auteur(s) du projet ici !
* **Jhon doe** _alias_ [@outout14](https://github.com/outout14)
Lisez la liste des [contributeurs](https://github.com/your/project/contributors) pour voir qui à aidé au projet !
_(pour le lien mettez simplement l'URL de votre projet suivi de ``/contirubors``)_
## License
Ce projet est sous licence ``exemple: WTFTPL`` - voir le fichier [LICENSE.md](LICENSE.md) pour plus d'informations
...@@ -107,7 +107,7 @@ public: ...@@ -107,7 +107,7 @@ public:
Grid& operator=(const Grid& g); Grid& operator=(const Grid& g);
//! \brief Vérifie si deux grilles sont identiques //! \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. //! \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;
......
...@@ -18,7 +18,7 @@ class Simulation { ...@@ -18,7 +18,7 @@ class Simulation {
private: private:
bool canRun; bool canRun;
unsigned int time; unsigned int time;
unsigned int period; int period;
Automaton automaton; Automaton automaton;
Grid startGrid; Grid startGrid;
History hist; History hist;
...@@ -89,8 +89,9 @@ public: ...@@ -89,8 +89,9 @@ public:
//! \brief Donne la période de la simulation //! \brief Donne la période de la simulation
//! //!
//! Si elle n'est pas encore obtenue : vaut 0 //! 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 //! \return période de la simulation
unsigned int getPeriod() {return period;} int getPeriod() {return period;}
//! \brief Indique l'étape actuelle de la simulation //! \brief Indique l'étape actuelle de la simulation
//! \return nombre de pas depuis le début //! \return nombre de pas depuis le début
......
...@@ -44,7 +44,7 @@ Grid& Grid::operator=(const Grid& g){ ...@@ -44,7 +44,7 @@ Grid& Grid::operator=(const Grid& g){
return *this; 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; return nb_rows==G.nb_rows && nb_col==G.nb_col && matrix==G.matrix;
} }
......
...@@ -945,7 +945,7 @@ void MainWindow::on_nextButton_clicked() ...@@ -945,7 +945,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"); ui->stepsPeriodLabel->setText(simulation.getPeriod()!=-1?QString::number(simulation.getPeriod())+" steps":"none");
ui->nbStepsLabel->setText(QString::number(simulation.getTime())+" steps"); ui->nbStepsLabel->setText(QString::number(simulation.getTime())+" steps");
if(simulation.frozen()) { if(simulation.frozen()) {
ui->simStatusLabel->setText("Status : frozen"); ui->simStatusLabel->setText("Status : frozen");
...@@ -958,7 +958,7 @@ void MainWindow::on_prevButton_clicked() ...@@ -958,7 +958,7 @@ void MainWindow::on_prevButton_clicked()
QMessageBox::warning(this, "Unable to step back", "Empty history : unable to step back"); QMessageBox::warning(this, "Unable to step back", "Empty history : unable to step back");
} }
ui->grid_view->copy_grid(simulation.getGrid()); 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() void MainWindow::on_playPauseButton_clicked()
......
...@@ -34,6 +34,8 @@ void Simulation::setGrid(const Grid & grid) { ...@@ -34,6 +34,8 @@ void Simulation::setGrid(const Grid & grid) {
hist = History(hist.get_nbMax()); hist = History(hist.get_nbMax());
} else if((grid.get_col() != automaton.getGrid().get_col())&&(grid.get_rows() != automaton.getGrid().get_rows())) { } else if((grid.get_col() != automaton.getGrid().get_col())&&(grid.get_rows() != automaton.getGrid().get_rows())) {
return; return;
} else if(!(automaton.getGrid() == grid)) { //S'il y a modification manuelle de la grille pendant la simulation
period = -1;
} }
automaton.setGrid(grid); automaton.setGrid(grid);
} }
...@@ -65,7 +67,6 @@ void Simulation::resize(size_t l,size_t c) { ...@@ -65,7 +67,6 @@ void Simulation::resize(size_t l,size_t c) {
hist = History(hist.get_nbMax()); hist = History(hist.get_nbMax());
} }
#include <QElapsedTimer>
void Simulation::step() { void Simulation::step() {
if(!canRun) { if(!canRun) {
return; return;
...@@ -73,13 +74,10 @@ void Simulation::step() { ...@@ -73,13 +74,10 @@ void Simulation::step() {
++time; ++time;
hist.pushGrid(automaton.getGrid()); hist.pushGrid(automaton.getGrid());
QElapsedTimer t;
t.start();
automaton.runOnce(); automaton.runOnce();
qDebug() << t.elapsed();
automaton.getNeighborhoodRule()->update_generation(time); automaton.getNeighborhoodRule()->update_generation(time);
if(!period && startGrid == automaton.getGrid()) { if(period==0 && startGrid == automaton.getGrid()) {
period = time; 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