Elementary Cellular Automata have two possible values for each cell (0 or 1), and rules that depend only on nearest neighbor values. As a result, the evolution of an elementary cellular automaton can completely be described by a table specifying the state a given cell will have in the next generation based on the value of the cell to its left, the value of the cell itself, and the value of the cell to its right. - Wolfram MathWorld
Recently, i've moved to using ggez for all of the rendering. I have way more options and it looks better. I'm still capturing the images with the snip tool, maybe there's a better way.