Automate.cpp 1.66 KB
Newer Older
1
#include <Automate.h>
2
3

std::unique_ptr<Automate> Automate::instance = nullptr;
4

5
/// La méthode nextTimer calcule un nouveau pas de temps, elle s'occupe également de la taille du buffer des réseaux qui est pour le moment hardcodé mais qui peut très facilement devenir un attribut modifiable par accesseur si besoin
6
7
void Automate::nextTimer()
{
Romain De Laage De Bellefaye's avatar
Romain De Laage De Bellefaye committed
8
	std::cout << l << h << std::endl;
9
10
11
12
	if((l!=0)&&(h!=0)) //il faut que l et h aient été initialisés autrement que nuls
	{
		if(buffer.size()!=0)    //il faut que l'on ait un premier réseau dans le buffer,  
		{                       //choisi par l'utilisateur (besoin d'une fonction initialiser() dans automate ?)
Romain De Laage De Bellefaye's avatar
Romain De Laage De Bellefaye committed
13
			Reseau r = Reseau(*(--buffer.end())); //on crée un nouveau réseau à partir de l'ancien
14
15
16
17
18
			//on parcourt la liste de ses cellules
			for(size_t i = 0; i<h; i++)
			{
				for(size_t j = 0; j<l; j++)
				{
Romain De Laage De Bellefaye's avatar
Romain De Laage De Bellefaye committed
19
20
					Voisinage voisinage(&(*(--buffer.end())).getReseau()[i][j]);
					regleVoisinage->calculVoisinage(voisinage, *(--buffer.end()));
21
22
23
24
25
26
27
28
29
30
					const Etat e = fonction->getEtatSuivant(voisinage, r.getReseau()[i][j]);
					while(r.getReseau()[i][j].getIndEtat()!=e.getIndice())
						r.getReseau()[i][j].incrementerEtat();
				}
			}
			buffer.push_back(r);
			if(buffer.size() > 15) { // taille maximum du buffer : 15
				buffer.erase(buffer.begin());
			}
		}
Romain De Laage De Bellefaye's avatar
Romain De Laage De Bellefaye committed
31
32
33
34
		else {
			buffer.push_back(reseauInit);
			nextTimer();
		}
35
	}
36
}
Leon Do Castelo's avatar
Leon Do Castelo committed
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52

void Automate::reinitialiserAutomate(){
    title = "";
    delai = 500;
    delete fonction;
    delete regleVoisinage;
    buffer.clear();
    itBuffer = buffer.begin();
    h = 0;
    l = 0;
    reseauInit = Reseau(0, 0);
    year = 2000;
    author = "Anonym";
    desc = "";
    ensemble.reset();
}