cellularautomaton/field.py
2017-05-16 22:49:28 +02:00

45 lines
1.1 KiB
Python

import numpy as np
import rule
class Field(object):
def __init__(self, shape = (32,32)):
self.resize(shape)
self.a_to_b = True
self.rule = rule.Rule(0)
def setRule(self, rule):
self.rule = rule
def resize(self, shape):
self.shape = shape
self.matrix_a = np.matrix(np.zeros(shape, int))
self.matrix_b = np.matrix(np.zeros(shape, int))
def update(self):
self.a_to_b = False if self.a_to_b else True
a = self.matrix_a if self.a_to_b else self.matrix_b
b = self.matrix_b if self.a_to_b else self.matrix_a
h, w = self.shape
for i in range(h):
for j in range(w):
b[i,j] = self.rule.applyRule(a, i, j)
def getField(self):
return self.matrix_b if self.a_to_b else self.matrix_a
def setValue(self, y, x, val):
self.matrix_a[y,x] = val
self.matrix_b[y,x] = val
# some testing
if __name__ == "__main__":
f = Field((160,90))
r = rule.Rule(2)
f.setRule(r)
f.setValue(2,2,1)
for i in range(10):
print(f.getField())
f.update()