Merge branch 'effects'
[blynken.git] / client / controls / life.py
blob4112ec33d4014315a7ac2011ac83a64e0cb3f8fa
2 __all__ = ['life_controller']
4 from functools import partial
6 get_neighbors = \
7 lambda index, x, y: index(x+1, y+1) + index(x, y+1) + index(x-1, y+1) \
8 + index(x+1, y) + index(x-1, y) \
9 + index(x+1, y-1) + index(x, y-1) + index(x-1, y-1)
12 def life_controller(x_size, y_size, rule=([2,3], [3]), p=0.5):
13 field, next = set(), set()
15 rule = rule[1], rule[0]
17 from random import random
18 from time import sleep
20 for x in xrange(x_size):
21 for y in xrange(y_size):
22 if random() < p:
23 field.add((x, y))
25 index = lambda x, y: ((x % x_size), (y % y_size)) in field
27 while True:
28 for x in xrange(x_size):
29 for y in xrange(y_size):
30 if get_neighbors(index, x, y) in rule[index(x, y)]:
31 next.add((x, y))
32 field, next = next, set()
33 yield field
34 sleep(0.2)