Data commit
This commit is contained in:
parent
7387c8f97b
commit
cb5bb5e222
199093 changed files with 3378972 additions and 0 deletions
|
|
@ -0,0 +1,111 @@
|
|||
cell_size = 10
|
||||
sample = 10
|
||||
play = False # simulation is running
|
||||
last_cell = 0
|
||||
|
||||
def setup():
|
||||
global grid, next_grid, rows, cols
|
||||
size(800, 500)
|
||||
|
||||
rows = height / cell_size
|
||||
cols = width / cell_size
|
||||
grid = empty_grid()
|
||||
next_grid = empty_grid()
|
||||
randomize_grid()
|
||||
|
||||
println("Press 'space' to start/stop")
|
||||
println("'e' to clear all cells")
|
||||
println("'b' demonstrate 'blinker'")
|
||||
println("'g' demonstrate glider")
|
||||
println("'r' to randomize grid")
|
||||
println("'+' and '-' to change speed")
|
||||
|
||||
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(255)
|
||||
noStroke()
|
||||
if current_state:
|
||||
rect(x, y, cell_size, cell_size)
|
||||
if play:
|
||||
ngbs_alive = calc_ngbs_alive(i, j)
|
||||
result = rule(current_state, ngbs_alive)
|
||||
next_grid[i][j] = result
|
||||
|
||||
if play and frameCount % sample == 0 and not mousePressed:
|
||||
step()
|
||||
|
||||
def rule(current, ngbs):
|
||||
""" classic Conway's Game of Life rule """
|
||||
if ngbs < 2 or ngbs > 3:
|
||||
return 0 # dies / dead
|
||||
elif ngbs == 3:
|
||||
return 1 # born / alive
|
||||
else:
|
||||
return current # stays the same (ngbs == 2)
|
||||
|
||||
def calc_ngbs_alive(i, j):
|
||||
NEIGHBOURS = ((-1, 00), (01, 00), # a tuple describing the neighbourhood of a cell
|
||||
(-1, -1), (00, -1),
|
||||
(01, -1), (-1, 01),
|
||||
(00, 01), (01, 01))
|
||||
alive = 0
|
||||
for iv, jv in NEIGHBOURS:
|
||||
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():
|
||||
from random import choice
|
||||
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 keyReleased():
|
||||
global grid, play, sample
|
||||
if key == "e":
|
||||
grid = empty_grid()
|
||||
if key == "r":
|
||||
randomize_grid()
|
||||
if key == "g":
|
||||
grid[10][10:13] = [0, 1, 0]
|
||||
grid[11][10:13] = [0, 0, 1]
|
||||
grid[12][10:13] = [1, 1, 1]
|
||||
if key == "b":
|
||||
grid[10][10:13] = [0, 1, 0]
|
||||
grid[11][10:13] = [0, 1, 0]
|
||||
grid[12][10:13] = [0, 1, 0]
|
||||
if key == " ":
|
||||
play = not play
|
||||
if str(key) in '+=':
|
||||
sample = max(sample - 1, 1);
|
||||
if key == '-':
|
||||
sample += 1
|
||||
|
||||
def mousePressed():
|
||||
paint()
|
||||
|
||||
def mouseDragged():
|
||||
paint()
|
||||
|
||||
def paint():
|
||||
global last_cell
|
||||
i, j = mouseX // cell_size, mouseY // cell_size
|
||||
p = j * cols + i
|
||||
if p != last_cell:
|
||||
last_cell = p
|
||||
grid[i][j] = (1, 0)[grid[i][j]]
|
||||
Loading…
Add table
Add a link
Reference in a new issue