Étape 7: mise à jour
Cette étape s’applique la règle de transition à chaque cellule des intérêts. Avant d’aborder cette construction, il est important d’aborder les deux couches de cellules mortes autour de la configuration principale. Ces cellules permettent l’automate d’étendre si nécessaire. Normalement, un automate cellulaire dans le jeu de la vie de Conway évolue sur un réseau infini ; Toutefois, il est plus pratique représenter cette grille dans un conteneur virtuel finie (par exemple un vecteur). Ce changement nécessite une couche de « tampon » de cellules mortes pour permettre l’expansion de l’automate. Ainsi, nous devrions vérifier toutes les cellules dans la grille, y compris la couche tampon plus intimes (Rappelez-vous, la couche tampon ultrapériphériques serait composé de cellules dont les quartiers ont zéro des cellules vivantes, afin qu’ils restent morts et n’ont pas besoin d’être considéré comme). L’en-tête de la fonction ressemblerait à ce qui suit (j’ai nommé la fonction updateVec).
vecteur < vecteur > updateVec (vecteur < vecteur > grille)
Essentiellement la fonction fonctionne en créant un nouveau vecteur de dimension 2 et remplir les cellules avec les valeurs correctes des cellules mises à jour de la grille originale. Le segment de code entier ressemblerait à ce qui suit.
vecteur < vecteur > updateVec (vecteur < vecteur > grille)
{
int size=grid.size() ;
vecteur < vecteur > newgrid (taille, vector(taille));
int c1 = 1 ;
int c2 = 1 ;
tandis que (c1
{
tandis que (c2
{
int sum_neighborhood = grille [c1 + 1] [c2] + grille [c1] [c2 + 1] + grille [c1 + 1] [c2 + 1] + grille [c1-1] [c2-1] ;
sum_neighborhood += grille [c1-1] [c2] + grille [c1] [c2-1] + grille [c1 + 1] [c2-1] + grille [c1-1] [c2 + 1] ;
Si (grille [c1] [c2] == 0 & & sum_neighborhood == 3)
newgrid [c1] [c2] = 1 ;
ElseIf (grille [c1] [c2] == 0 & & sum_neighborhood! = 3)
newgrid [c1] [c2] = 0 ;
ElseIf (grille [c1] [c2] == 1 & &(sum_neighborhood==2|| sum_neighborhood == 3))
newgrid [c1] [c2] = 1 ;
ElseIf (grille [c1] [c2] == 1 & & (sum_neighborhood! = 2 & & sum_neighborhood! = 3))
newgrid [c1] [c2] = 0 ;
C2 ++ ;
}
C2 = 1 ;
C1 ++ ;
}
Return newgrid ;
}
Notez que l’initialisation de sum_neighborhood a eu lieu sur deux lignes en raison de contraintes spatiales. L’itération a débuté à 1 et s’est terminée avant la taille-2 afin d’éviter de perdre du temps à vérifier la couche tampon ultrapériphériques.