So I was reading this artcle on what the author calls “History Dependent Cellular Automata” which I found interesting and wanted to replicate in Roblox.
The gist is you generate each layer, stacking them on top of each other. However, each cell on each layer not only checks for its immediate neighbours but also the neighbours of the previous layer where the cell would be located, as well as the previous cell sitting right below the current cell. Giving a possibility of 17 neighbours to determine whether this current cell will be dead (invisible) or alive (black block).
local function Start()
for i=1, StacksAmount do
SetUp()
for i=1, StepAmount do
DoSimStep(Grid) -- CountNeighbours method is called
end
ShowGrid(i)
GridPrev = Grid -- Save the grid to GridPrev
end
end
function module:CountNeighbours(Grid, SizeX, SizeY, GridPrev)
local neighbours = 0
for x=-1, 1 do
for y=-1, 1 do
if self.x + x < 1 or self.x + x > SizeX or self.y + y < 1 or self.y + y > SizeY then
neighbours += 1
else
local neighbour = Grid[self.x + x][self.y + y]
if neighbour.Alive == true or neighbour == nil then
neighbours += 1
end
if #GridPrev > 0 then -- get neighbours from previous grid
local neighbour = GridPrev[self.x + x][self.y + y]
if neighbour.Alive == true or neighbour == nil then
neighbours += 1
end
end
end
end
end
return neighbours
end
However, when printing out the total neighbours, I’m getting cells which supposedly have 18 live neighbours cells.
This should be impossible as the max is 17, so obviously there must be a problem with my code.
Not to mention that every layer after the first layer is just completely full of live cells.
Dead cells are invisible, hence the gaps in the working first layer and no gaps in the second layer.