public bool CalculateNextTurn(int turn) { var activeNeighbours = Neighbours().Count(neighbour => neighbour != null && neighbour.IsActiveInTurn(turn - 1)); var isActive = IsActiveInTurn(turn - 1); //If a cube is active and exactly 2 or 3 of its neighbors are also active, the cube remains active. Otherwise, the cube becomes inactive. //If a cube is inactive but exactly 3 of its neighbors are active, the cube becomes active. Otherwise, the cube remains inactive. if (isActive && (activeNeighbours == 2 || activeNeighbours == 3)) { IsActive.Add(turn, true); return(true); } if (!isActive && activeNeighbours == 3) { IsActive.Add(turn, true); return(true); } IsActive.Add(turn, false); return(false); }