Commit 3749517c authored by Yann Boucher's avatar Yann Boucher
Browse files

Ajout d'une fonction update_generation() à NeighborhoodRule qui permettra...

Ajout d'une fonction update_generation() à NeighborhoodRule qui permettra l'imlpémentation du voisinage de Margolus, simulation reset lors du chargement d'un modèle
parent 0dee1e4d
Pipeline #79345 failed with stage
......@@ -46,10 +46,10 @@ public:
//! \return Retourne les formats de voisinage possible dans un std::vector.
virtual std::vector<NeighborhoodFormat> getFormats() const = 0;
//! \brief Fait avancer l'état de la règle de voisinage d'une génération
// Fait avancer l'état de la règle de voisinage d'une génération. Cette fonction est utilisée pour les voisinages tels que celui de Margolus, qui dépendent de la parité de la génération actuelle.
// \remark L'implémentation par défaut ne fait rien.
virtual void step() {}
//! \brief Change le numéro de génération de la règle de voisinage d'une génération
//! Fait avancer ou reculer l'état de la règle de voisinage d'une génération. Cette fonction est utilisée pour les voisinages tels que celui de Margolus, qui dépendent de la parité de la génération actuelle.
//! \remark L'implémentation par défaut ne fait rien.
virtual void update_generation(unsigned gen) {}
};
#endif // NEIGHBORHOODRULE_HPP
......@@ -387,6 +387,7 @@ void MainWindow::load_model(const QJsonObject &obj)
// On transfère la propriété de ces pointeurs vers Simulation, qui en est désormais propriétaire pour l'exécution de l'automate
simulation.setNeighborhoodRule(m_neighborhood_rule);
simulation.setTransitionRule(m_transition_rule);
simulation.reset();
ui_update_alphabet(alpha);
m_loaded_model = obj;
......
......@@ -58,7 +58,7 @@ void Simulation::resize(size_t l,size_t c) {
reset();
}*/
void Simulation::reset() {
void Simulation::reset() {
automaton.setGrid(startGrid);
time = 0;
period = 0;
......@@ -69,10 +69,10 @@ void Simulation::step() {
if(!canRun) {
return;
}
++time;
hist.pushGrid(automaton.getGrid());
automaton.runOnce();
automaton.getNeighborhoodRule()->step();
++time;
automaton.getNeighborhoodRule()->update_generation(time);
if(!period && startGrid == automaton.getGrid()) {
period = time;
}
......@@ -81,10 +81,10 @@ void Simulation::step() {
bool Simulation::back() {
bool r=false;
if(!hist.isEmpty()) {
--time;
automaton.setGrid(hist.topGrid());
//automaton.getNeighborhoodRule()->back();
automaton.getNeighborhoodRule()->update_generation(time);
hist.popGrid();
--time;
r=true;
}
return r;
......
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