-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathMoteur.vb
260 lines (245 loc) · 12.3 KB
/
Moteur.vb
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
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
''Thibault ANIN 2019 -- Dedi Orsay TP2E --
Public Class Moteur
Private minMort As Integer
Private maxMort As Integer
Private minNaissance As Integer
Private maxNaissance As Integer
Private largeurGrille As Integer
Private hauteurGrille As Integer
Private cellules(,) As Cellule
Private mur As Boolean
Sub setRegle(ByRef minMort As Integer, ByRef maxMort As Integer, ByRef minNaissance As Integer, ByRef maxNaissance As Integer)
Me.minMort = minMort
Me.maxMort = maxMort
Me.minNaissance = minNaissance
Me.maxNaissance = maxNaissance
End Sub
Sub setTailleGrille(ByRef n As Integer, ByRef m As Integer)
Me.largeurGrille = n
Me.hauteurGrille = m
ReDim cellules(largeurGrille, hauteurGrille)
'remplissage du tableau de cellules à deux dimensions
For i = 0 To largeurGrille
For j = 0 To hauteurGrille
cellules(i, j) = New Cellule
With cellules(i, j)
.Vivante = False
.VivanteSuivante = False
End With
Next
Next
End Sub
Sub getTailleGrille(ByVal n As Integer, ByVal m As Integer)
End Sub
Sub setEtatCellule(ByRef i As Integer, ByRef j As Integer, ByRef etat As Boolean)
cellules(i, j).Vivante = etat
End Sub
Function getEtatCellule(ByVal i As Integer, ByVal j As Integer) As Boolean
Return cellules(i, j).Vivante
End Function
Sub etatSuivant()
verifMort()
verifVie()
'Mise a jour du tableau de cellule avec les nouveaux états et remise à l'etat initial de "VivanteSuivante" (False)
For largeur = 0 To largeurGrille
For hauteur = 0 To hauteurGrille
cellules(largeur, hauteur).Vivante = cellules(largeur, hauteur).VivanteSuivante
cellules(largeur, hauteur).VivanteSuivante = False
Next
Next
End Sub
Sub verifMort()
Dim cpt = 0, ligne, colonne As Integer
'Incrementation d'un compteur pour connaitre le nombre de cellule vivante qui entour la cellule testée
For largeur = 0 To largeurGrille
For hauteur = 0 To hauteurGrille
cpt = 0
If cellules(largeur, hauteur).Vivante = False Then
For k = largeur - 1 To largeur + 1
ligne = k
'Si la ligne est negative, on repasse soit de l'autre coté de la fenetre (ligne coté opposé),
'si l'option "Mur" est désactivé, sinon (si otion "Mur" coché) la cellule est arreté.
If ligne = -1 Then
If mur = False Then
ligne = largeurGrille
Else
ligne = ligne + 1
End If
End If
'Si la ligne depasse la taille du tableau, on repasse soit de l'autre coté de la fenetre (ligne coté opposé),
'si l'option "Mur" est désactivé, sinon (si otion "Mur" coché) la cellule est arreté.
If ligne = largeurGrille + 1 Then
If mur = False Then
ligne = 0
Else
ligne = ligne - 1
End If
End If
colonne = hauteur - 1
'Si la colonne est negative, on repasse soit de l'autre coté de la fenetre (colonne du coté opposé),
'si l'option "Mur" est désactivé, sinon (si otion "Mur" coché) la cellule est arreté.
If colonne = -1 Then
If mur = False Then
colonne = hauteurGrille
Else
colonne = colonne + 1
End If
End If
If cellules(ligne, colonne).Vivante = True Then
cpt += 1
End If
colonne = hauteur + 1
'Si la colonne depasse la taille du tableau, on repasse soit de l'autre coté de la fenetre (colonne du coté opposé),
'si l'option "Mur" est désactivé, sinon (si otion "Mur" coché) la cellule est arreté.
If colonne = hauteurGrille + 1 Then
If mur = False Then
colonne = 0
Else
colonne = colonne - 1
End If
End If
If cellules(ligne, colonne).Vivante = True Then
cpt += 1
End If
Next
colonne = hauteur
ligne = largeur - 1
'Si la ligne est negative, on repasse soit de l'autre coté de la fenetre (ligne coté opposé),
'si l'option "Mur" est désactivé, sinon (si otion "Mur" coché) la cellule est arreté.
If ligne = -1 Then
If mur = False Then
ligne = largeurGrille
Else
ligne = ligne + 1
End If
End If
If cellules(ligne, colonne).Vivante = True Then
cpt += 1
End If
'Si la ligne depasse la taille du tableau, on repasse soit de l'autre coté de la fenetre (ligne coté opposé),
'si l'option "Mur" est désactivé, sinon (si otion "Mur" coché) la cellule est arreté.
ligne = largeur + 1
If ligne = largeurGrille + 1 Then
If mur = False Then
ligne = 0
Else
ligne = ligne - 1
End If
End If
If cellules(ligne, colonne).Vivante = True Then
cpt += 1
End If
'Utilisation du compteur pour determiner l'etat suivant de la cellule testée selon les règles entrées par l'utilisateur
For i = minNaissance To maxNaissance
If cpt = i Then
cellules(largeur, hauteur).VivanteSuivante = True
End If
Next
End If
Next
Next
End Sub
Sub verifVie()
Dim cpt = 0, ligne, colonne As Integer
'Incrementation d'un compteur pour connaitre le nombre de cellule vivante qui entour la cellule testée
For largeur = 0 To largeurGrille
For hauteur = 0 To hauteurGrille
cpt = 0
If cellules(largeur, hauteur).Vivante = True Then
For k = largeur - 1 To largeur + 1
ligne = k
If ligne = -1 Then
If mur = False Then
ligne = largeurGrille
Else
ligne = ligne + 1
End If
End If
'Si la ligne depasse la taille du tableau, on repasse soit de l'autre coté de la fenetre (ligne coté opposé),
'si l'option "Mur" est désactivé, sinon (si otion "Mur" coché) la cellule est arreté.
If ligne = largeurGrille + 1 Then '
If mur = False Then
ligne = 0
Else
ligne = ligne - 1
End If
End If
colonne = hauteur - 1
'Si la colonne est negative, on repasse soit de l'autre coté de la fenetre (colonne du coté opposé),
'si l'option "Mur" est désactivé, sinon (si otion "Mur" coché) la cellule est arreté.
If colonne = -1 Then
If mur = False Then
colonne = hauteurGrille
Else
colonne = colonne + 1
End If
End If
If cellules(ligne, colonne).Vivante = True Then
cpt += 1
End If
colonne = hauteur + 1
'Si la colonne depasse la taille du tableau, on repasse soit de l'autre coté de la fenetre (colonne du coté opposé),
'si l'option "Mur" est désactivé, sinon (si otion "Mur" coché) la cellule est arreté.
If colonne = hauteurGrille + 1 Then '
If mur = False Then
colonne = 0
Else
colonne = colonne - 1
End If
End If
If cellules(ligne, colonne).Vivante = True Then
cpt += 1
End If
Next
colonne = hauteur
ligne = largeur - 1
'Si la ligne est negative, on repasse soit de l'autre coté de la fenetre (ligne coté opposé),
'si l'option "Mur" est désactivé, sinon (si otion "Mur" coché) la cellule est arreté.
If ligne = -1 Then
If mur = False Then
ligne = largeurGrille
Else
ligne = ligne + 1
End If
End If
If cellules(ligne, colonne).Vivante = True Then
cpt += 1
End If
ligne = largeur + 1
'Si la ligne depasse la taille du tableau, on repasse soit de l'autre coté de la fenetre (ligne coté opposé),
'si l'option "Mur" est désactivé, sinon (si otion "Mur" coché) la cellule est arreté.
If ligne = largeurGrille + 1 Then '
If mur = False Then
ligne = 0
Else
ligne = ligne - 1
End If
End If
colonne = hauteur
If cellules(ligne, colonne).Vivante = True Then
cpt += 1
End If
'Utilisation du compteur pour determiner l'etat suivant de la cellule testée selon les règles entrées par l'utilisateur
If minMort = maxMort Then
If cpt = maxNaissance Then cellules(largeur, hauteur).VivanteSuivante = True
Else
If cpt < minMort Then cellules(largeur, hauteur).VivanteSuivante = False
If cpt = minMort Then cellules(largeur, hauteur).VivanteSuivante = True
If cpt = maxMort Then cellules(largeur, hauteur).VivanteSuivante = True
If cpt > maxMort Then cellules(largeur, hauteur).VivanteSuivante = False
End If
End If
Next
Next
End Sub
'fonctionnalité uniquement disponible avec mon Interface
Public Sub setMur(ByVal mur As Boolean)
Me.mur = mur
End Sub
End Class
Public Class Cellule
'creation d'une class "Cellule" pour faciliter la manipulation des états d'une cellule
Public Property Vivante As Boolean
Public Property VivanteSuivante As Boolean
Public Property VivantePrecedante As Boolean
End Class