Paso 7: actualización
Este paso aplica la regla de transición a cada célula de sus intereses. Antes de abordar esta construcción, es importante abordar las dos capas de células muertas en la configuración principal. Estas células permiten el autómata ampliar si es necesario. Normalmente, un autómata celular en el juego de la vida de Conway se desarrolla en una red infinita; sin embargo, es más práctico representar esta red en un contenedor virtual finito (por ejemplo un vector). Este cambio exige una "capa del almacenador intermediario" de las células muertas para permitir la expansión de la autómata. Por lo tanto, debemos comprobar todas las celdas de la cuadrícula como la capa del almacenador intermediario más íntimos (Recuerde, consistiría en la capa del almacenador intermediario más externa de células cuyos barrios tienen cero células vivas, por lo que siguen siendo muertos y no deben considerarse). El encabezado de la función se asemejaría a lo siguiente (he llamado el updateVec de la función).
vector < vector > updateVec (vector < vector > red)
Esencialmente la función trabaja por crear un nuevo vector de 2 dimensiones y llenar las celdas con los valores correctos de las células actualizados de la red original. El segmento de código entero se asemejaría a lo siguiente.
vector < vector > updateVec (vector < vector > red)
{
int size=grid.size();
vector < vector > newgrid (tamaño, vector(tamaño));
c1 int = 1;
int c2 = 1;
mientras (c1
{
mientras (c2
{
int sum_neighborhood = red [c1 + 1] [c2] + parrilla [c1] [c2 + 1] + parrilla [c1 + 1] [c2 + 1] + parrilla [c1-1] [c2-1];
sum_neighborhood += grid [c1-1] [c2] + parrilla [c1] [c2-1] + parrilla [c1 + 1] [c2-1] + parrilla [c1-1] [c2 + 1];
Si (red [c1] [c2] == 0 & & sum_neighborhood == 3)
newgrid [c1] [c2] = 1;
else if (grid [c1] [c2] == 0 & & sum_neighborhood! = 3)
newgrid [c1] [c2] = 0;
else if (grid [c1] [c2] == 1 & &(sum_neighborhood==2|| sum_neighborhood == 3))
newgrid [c1] [c2] = 1;
else if (grid [c1] [c2] == 1 & & (sum_neighborhood! = 2 & & sum_neighborhood! = 3))
newgrid [c1] [c2] = 0;
C2 ++;
}
C2 = 1;
C1 ++;
}
volver newgrid;
}
Nota que la inicialización de sum_neighborhood tuvo lugar en dos líneas debido a limitaciones espaciales. La iteración comenzó en 1 y terminó antes de tamaño 2 para evitar perder el tiempo comprobando la capa del almacenador intermediario más externa.