Go for game maker. More complex things are just overkill.
Funny, because I'm currently working on a Conway's GoL based game too at the moment.
Here's my C++ code for the actual simulation:
Matrix<bool> backbuffer;
for (int y = state.beginy() - 1; y < state.endy() + 1; ++y)
{
for (int x = state.beginx() - 1; x < state.endx() + 1; ++x)
{
// Calculate neighbours
int neigh = 0;
if (state.at(x-1, y-1) == true) ++neigh;
if (state.at(x , y-1) == true) ++neigh;
if (state.at(x+1, y-1) == true) ++neigh;
if (state.at(x+1, y ) == true) ++neigh;
if (state.at(x+1, y+1) == true) ++neigh;
if (state.at(x , y+1) == true) ++neigh;
if (state.at(x-1, y+1) == true) ++neigh;
if (state.at(x-1, y ) == true) ++neigh;
// Any live cell with fewer than two live neighbours dies, as if caused by under-population.
if (state.at(x, y) == true && neigh < 2)
{
backbuffer.set(x, y, false);
}
// Any live cell with two or three live neighbours lives on to the next generation.
if (state.at(x, y) == true && (neigh == 2 || neigh == 3))
{
backbuffer.set(x, y, true);
}
// Any live cell with more than three live neighbours dies, as if by overcrowding.
if (state.at(x, y) == true && neigh > 3)
{
backbuffer.set(x, y, false);
}
// Any dead cell with exactly three live neighbours becomes a live cell, as if by reproduction.
if (state.at(x, y) == false && neigh == 3)
{
backbuffer.set(x, y, true);
}
}
}
state = backbuffer;
While it might not be a simple matter of 'copy-paste', I'm sure that you're competent enough to figure out how to translate the general idea of the C++ code to GML.
Feel free to ask me questions!