Cellulära automater och en implementering av Conways spelet i livet (6 / 11 steg)
Steg 6: skapa
Detta steg gäller skapandet av den första konfigurationen. Om du använder C ++ 11, tror jag det enklaste sättet att förvara automat innebär vektorer. Detta sätt, storleken på automat är anpassningsbar. Eftersom de lagrade data upprätthåller en 2-dimensionell form, är det bäst att förvara automat som en 2-dimensionell vektor (dvs vektorer i en vektor). Med denna installation ses automat som ett rutnät. Varje rad i rutnätet lagras som en vektor. Varje rad vektor lagras i sin tur i den huvudsakliga vektorn. Antag att vi vill börja med 10 celler med 10 cellrutnätet. Vector deklarationen skulle likna följande:
vektor < vector > rutnät (10, vektor(10, 0));
Denna förklaring inte bara skapar ett 10 x 10 rutnät men också initierar varje cellvärde till 0 (eller döda). Nu kan du implementera oavsett kod för att ändra värden i celler från början vid liv. Anta att jag vill ha cellerna initialt vid liv att bilda en solid kvadrat på nätet (från deras färg skillnader som noterat tidigare), så jag skulle genomföra en slinga som liknar följande:
för (int jag = 2; jag < 8; i ++)
{
för (int k = 2; k < 8; k ++)
Grid [i] [k] = 1;
}
Detta skapar önskat vektorn kallas rutnät, som jag sedan kan använda för att lagra den cellulär automat. Märke att jag har lämnat de två yttre skikten av celler i en död. Dessa lager är avgörande för automat. Jag kommer att förklara dem i steg 7. Som en separat funktion kallas newAutomaton() skulle detta segment av programmet likna följande:
vektor < vector > newAutomaton()
{
vektor < vector > rutnät (10, vektor(10, 0));
för (int jag = 2; jag < 8; i ++)
{
för (int k = 2; k < 8; k ++)
Grid [i] [k] = 1;
}
returnera rutnät.
}
Detta segment kan enkelt anpassas för att uppfylla kraven i uppgiften, men det ligger till grund för komponenten skapandet av simuleringen.