Stap 7: Update
Deze stap geldt de overgang regel voor elke cel van belangen. Voordat het aanpakken van deze constructie, is het belangrijk om aan te pakken van de twee lagen van dode cellen rond de belangrijkste configuratie. Deze cellen toestaan de automaat uit te breiden indien nodig. Normaal gesproken evolueert een cellulaire automaat in Conway's Game of Life in een oneindige raster; echter is het praktischer om te vertegenwoordigen dit raster in een eindige virtuele container (bijvoorbeeld een vector). Deze verandering vereist een "buffer laag" van dode cellen te voorzien in de uitbreiding van de automaat. Dus, we moeten check alle cellen in het raster met inbegrip van de buffer van de binnenste laag (Onthoud, de ultraperifere buffer laag zou bestaan uit cellen waarvan buurten nul levende cellen, hebben zodat ze dode blijven en niet hoeft te worden beschouwd). De kop van de functie zou lijken op de volgende (ik heb de functie updateVec genoemd).
vector < vector > updateVec (vector < vector > Raster)
In wezen de functie werkt door het creëren van een nieuwe 2-dimensionale vector en de cellen vullen met de juiste waarden van de bijgewerkte cellen uit de oorspronkelijke tabel. De volledige codesegment zou ongeveer als volgt uit.
vector < vector > updateVec (vector < vector > Raster)
{
int size=grid.size();
vector < vector > newgrid (grootte, vector(grootte));
int c1 = 1;
int c2 = 1;
terwijl (c1
{
terwijl (c2
{
int sum_neighborhood = raster [c1 + 1] [c2] + raster [c1] [c2 + 1] + raster [c1 + 1] [c2 + 1] + raster [c1-1] [c2-1];
sum_neighborhood += raster [c1-1] [c2] + raster [c1] [c2-1] + raster [c1 + 1] [c2-1] + raster [c1-1] [c2 + 1];
Als (raster [c1] [c2] == 0 & & sum_neighborhood == 3)
newgrid [c1] [c2] = 1;
anders als (raster [c1] [c2] == 0 & & sum_neighborhood! = 3)
newgrid [c1] [c2] = 0;
anders als (raster [c1] [c2] == 1 & &(sum_neighborhood==2|| sum_neighborhood == 3))
newgrid [c1] [c2] = 1;
anders als (raster [c1] [c2] == 1 & & (sum_neighborhood! = 2 & & sum_neighborhood! = 3))
newgrid [c1] [c2] = 0;
C2 ++;
}
c2 = 1;
C1 ++;
}
Return newgrid;
}
Merk op dat de initialisatie van de sum_neighborhood nam plaats over twee regels wegens de ruimtelijke beperkingen. De iteratie begon op 1 en eindigde vóór grootte-2 om te voorkomen verspillen tijd controleren de ultraperifere buffer laag.