Cellulära automater och en implementering av Conways spelet i livet (8 / 11 steg)
Steg 8: kontrollera
Det här steget säkerställer att två buffert lager återstår kring den centrala automat. Check funktionen bör köra efter varje uppdatering. Det fungerar genom att kontrollera de yttre två lagren för levande celler. Om den hittar något, går det en subrutin för att expandera automat av ett lager av döda celler. Koden för den här funktionen med titeln checkVec() skulle se ut så här.
vektor < vector > checkVec (vector < vektor > rutnät)
{
int size=grid.size();
int sumElementsOuter = 0;
for(Vector::iterator j=Grid[0].BEGIN();j!=Grid[0].End();j++)
sumElementsOuter += * j;
for(Vector::iterator k=Grid[size-1].BEGIN();k!=Grid[size-1].End();k++)
sumElementsOuter += * k;
för (int m = 1; m
sumElementsOuter = rutnät [m] [0] + rutnät [m] [storlek-1] + sumElementsOuter;
Lägg upp summan av staterna i lager precis innan den yttre
int sumElementsIn = 0;
for(Vector::iterator x=Grid[1].BEGIN();x!=Grid[1].End();++x)
sumElementsIn += * x;
for(Vector::iterator y=Grid[size-2].BEGIN();y!=Grid[size-2].End();++y)
sumElementsIn += * y;
för (int m = 2, m
sumElementsIn = rutnät [m] [1] + rutnät [m] [storlek-2] + sumElementsIn;
IF(sumElementsOuter>0)
{
omgjorda behöver uppdateras för att ha två nya yttre lager
Grid.INSERT(Grid.BEGIN(), vektor (storlek 0));
Grid.INSERT(Grid.BEGIN(), vektor (storlek 0));
Grid.push_back (vektor (storlek 0)).
Grid.push_back (vektor (storlek 0)).
int rows2 = 0;
int col2 = 0;
samtidigt (rows2
{
Grid[rows2].INSERT(Grid[rows2].BEGIN(), 0);
Grid[rows2].INSERT(Grid[rows2].BEGIN(), 0);
Grid[rows2].push_back(0);
Grid[rows2].push_back(0);
rows2 ++;
}
}
annat if(sumElementsIn>0)
{
omgjorda behöver uppdateras för att ha en ny yttre lager
Grid.INSERT(Grid.BEGIN(), vektor (storlek 0));
Grid.push_back (vektor (storlek 0)).
int rows2 = 0;
samtidigt (rows2
{
Grid[rows2].INSERT(Grid[rows2].BEGIN(), 0);
Grid[rows2].push_back(0);
rows2 ++;
}
}
returnera rutnät.
}
Ledsen om formateringen är avstängd. Alla dessa funktioner kan hittas här där koden bör vara lättare att läsa. Observera också att vissa funktioner är beroende av iteratorer. Så, vara noga med att inkludera iterator biblioteket i direktivet inkludera i början av programmet.