-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathautocell.h
124 lines (101 loc) · 2.9 KB
/
autocell.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
#ifndef AUTOCELL_H
#define AUTOCELL_H
#include <QVector>
#include <QPoint>
#include "etat.h"
/*!
* \brief Cette classe abstraite est la classe mère de tous les automates cellulaires,
* elle contient plusieurs attributs et méthodes nécessaires au bon fonctionnement de l'application
* et facilitant l'ajout de nouveaux automates cellulaires
*/
class AutoCell
{
public:
QVector<QVector<int> > getMatrice() const;
AutoCell(int width = 10, int height=10, int cellStates=2, int nb_neighborhood=3, QString name="");
void setMatrice(const QVector<QVector<int> > &value);
int getWidth() const;
void setWidth(int value);
int getHeight() const;
void setHeight(int value);
int getCellWidth() const;
void setCellWidth(int value);
int getCellHeight() const;
void setCellHeight(int value);
/*!
* \brief affecte une valeur à une cellule d'un état particulier
* \param numEtat : numéro de l'état à modifier
* \param i : indice de ligne
* \param j : indice de colonne
* \param val : valeur
*/
void setValueEtat(int numEtat, int i, int j, int val);
/*!
* \brief réinitialise l'automate à son état initial
*/
void reinit();
/*!
* \brief l'automate retourne à son état précédent
*/
virtual void previous() = 0;
QVector<QVector<int> > getNeighborhood() const;
void setNeighborhood(const QVector<QVector<int> > &value);
/*!
* \brief Cette fonction permet de changer l'état d'une cellule
* \param point : QPoint récupéré lors du clic de l'utilisateur sur la render Area
*/
virtual void changeCellState(QPoint point)=0;
/*!
* \brief Cette fonction permet à l'automate de passer à l'état suivant
* Ce calcul étant propre à chaque automate, cette fonction est virtuelle
*/
virtual void nextState()=0;
int getCurrentState() const;
void setCurrentState(int value);
QVector<Etat> getEtats() const;
void setEtats(const QVector<Etat> &value);
/*!
* \brief remplit aléatoirement la matrice de l'automate
*/
virtual void generateRandomly() = 0;
/*!
* \brief nombre max d'états stockés dans le vecteur d'état. On le limite à 10 pour des raisons de performance
*/
const static int nbMaxEtats = 10;
QString getName() const;
void setName(const QString &value);
protected:
/*!
* \brief vecteur stockant les différents états générés, permettant de naviguer parmis ceux-ci
*/
QVector< Etat > etats;
/*!
* \brief etat de la matrice avant la première génération
*/
Etat etatInitial;
/*!
* \brief Nom de l'automate
*/
QString name;
/*!
* \brief largeur de l'automate
*/
int width;
/*!
* \brief hauteur de l'automate
*/
int height;
/*!
* \brief nombre d'états des cellules
*/
int cellStates;
/*!
* \brief nombre d'états générés depuis l'état initial
*/
int currentState;
/*!
* \brief voisinage
*/
QVector< QVector <int> > neighborhood;
};
#endif // AUTOCELL_H