OPC.button("clearButton", "clear");
OPC.button("randomButton", "random");
OPC.toggle("birth_0", false);
OPC.toggle("birth_1", false);
OPC.toggle("birth_2", false);
OPC.toggle("birth_3", true);
OPC.toggle("birth_4", false);
OPC.toggle("birth_5", false);
OPC.toggle("birth_6", false);
OPC.toggle("birth_7", false);
OPC.toggle("birth_8", false);
OPC.toggle("survival_0", false);
OPC.toggle("survival_1", false);
OPC.toggle("survival_2", true);
OPC.toggle("survival_3", true);
OPC.toggle("survival_4", false);
OPC.toggle("survival_5", false);
OPC.toggle("survival_6", false);
OPC.toggle("survival_7", false);
OPC.toggle("survival_8", false);
OPC.color("color_state0", "#000000");
OPC.color("color_state1", "#ffffff");
function buttonPressed(variableName) {
if (variableName == "clearButton") cells.fill(0);
if (variableName == "randomButton")
for (i = w * w; i--; ) cells[i] = int(random(2));
const m = min(windowWidth, windowHeight);
cells = new Uint8Array(w * w).fill(0);
g = createGraphics(w, w);
g.background(color_state0);
const data_state1 = new Uint8Array([
const next = new Uint8Array(cells);
const survival = new Uint8Array([
const birth = new Uint8Array([
for (let y = 1; y < w - 1; ++y) {
for (let x = 1; x < w - 1; ++x) {
const oldState = cells[i];
const condition = oldState ? survival : birth;
const newState = condition[neighbors];
newState && g.pixels.set(data_state1, i * 4);
image(g, 0, 0, width, height);
const mx = ceil(map(mouseX, 0, width, 0, w - 1));
const my = ceil(map(mouseY, 0, height, 0, w - 1));
for (let dy = -b; dy <= b; dy++) {
for (let dx = -b; dx <= b; dx++) {
const d = dx ** 2 + dy ** 2;
if (x < 0 || x >= w || y < 0 || y >= w) continue;