From 3008484e5374e08af6892686e0a55cc47af25170 Mon Sep 17 00:00:00 2001 From: Alexandre B A Villares Date: Thu, 19 Sep 2019 23:37:23 -0300 Subject: [PATCH] Create sketch_190919a.pyde --- 2019/sketch_190919a/sketch_190919a.pyde | 108 ++++++++++++++++++++++++ 1 file changed, 108 insertions(+) create mode 100644 2019/sketch_190919a/sketch_190919a.pyde diff --git a/2019/sketch_190919a/sketch_190919a.pyde b/2019/sketch_190919a/sketch_190919a.pyde new file mode 100644 index 00000000..1bc6561a --- /dev/null +++ b/2019/sketch_190919a/sketch_190919a.pyde @@ -0,0 +1,108 @@ +cell_size = 10 +from random import choice + +clr = 255 +# ngbs_list = ((-1, 0), ( 1, 0), +# (-1, -1), ( 0, -1), +# ( 1, -1), (-1, 1), +# ( 0, 1), ( 0, 0)) +ngbs_list = ((-1, 0), ( 1, 0), + (-1, -1), ( 0, -1), + ( 1, -1), (-1, 1), + ( 0, 1), ( 1, 1)) + +def rule(s, v): + if v < 2 or v > 3: + return 0 + elif v == 3: + return 1 + else: + return s + +play = False + +def setup(): + global grid, next_grid, rows, cols + size(800, 500) + colorMode(HSB) + rows = height / cell_size + cols = width / cell_size + grid = empty_grid() + next_grid = empty_grid() + noStroke() + +def draw(): + # background(0) + + for i in range(cols): + x = i * cell_size + for j in range(rows): + y = j * cell_size + current_state = grid[i][j] + # fill(clr, 255, current_state * 255, 100) # translucent + + ngbs_alive = calc_ngbs_alive(i, j) + result = rule(current_state, ngbs_alive) + next_grid[i][j] = result + if current_state: + # circle(x, y, cell_size * 2) # overlapping circles + fill((clr+ next_grid[i][j]*128)%255, 255, current_state * 255) + else: + fill(0, 100) + square(x, y, cell_size) + + + if play: + step() + +def calc_ngbs_alive(i, j): + alive = 0 + for iv, jv in ngbs_list: + alive += grid[(i + iv) % cols][(j + jv) % rows] + return alive + +def empty_grid(): + grid = [] + for _ in range(cols): + grid.append([0] * rows) + return grid + +def randomize_grid(): + global clr + clr = random(255) + for i in range(cols): + for j in range(rows): + grid[i][j] = choice((0, 1)) + +def step(): + global grid, next_grid + grid = next_grid + next_grid = empty_grid() + +def keyPressed(): + global grid + if key == "e": + grid = empty_grid() + if key == "r": + randomize_grid() + if key == " ": + global play + play = not play + +def mouseReleased(): + invert_on_mouse() + +def mouseDragged(): + invert_on_mouse() + +def invert_on_mouse(): + for i in range(cols): + x = i * cell_size + for j in range(rows): + y = j * cell_size + current_state = grid[i][j] + if mouse_over(x, y): + grid[i][j] = (1, 0)[current_state] + +def mouse_over(x, y): + return x < mouseX < x + cell_size and y < mouseY < y + cell_size