cellularautomaton/field.py

69 lines
1.7 KiB
Python
Raw Permalink Normal View History

2017-05-16 22:49:28 +02:00
import rule
2017-05-18 20:58:15 +02:00
import time
2017-05-16 22:49:28 +02:00
class Field(object):
def __init__(self, shape = (32,32)):
self.resize(shape)
self.a_to_b = True
self.rule = rule.Rule(0)
2017-05-18 20:58:15 +02:00
self.updatedValues = [] # tuple (i,j, newValue)
2017-05-16 22:49:28 +02:00
def setRule(self, rule):
self.rule = rule
def resize(self, shape):
self.shape = shape
2017-05-18 20:58:15 +02:00
self.matrix_a = []
self.matrix_b = []
for i in range(shape[0]):
row_a = []
row_b = []
for j in range(shape[1]):
row_a.append(0)
row_b.append(0)
self.matrix_a.append(row_a)
self.matrix_b.append(row_b)
def getUpdatedValues(self):
return self.updatedValues
2017-05-16 22:49:28 +02:00
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):
2017-05-18 20:58:15 +02:00
#b[i,j] = self.rule.applyRule(a, i, j)
b[i][j] = self.rule.applyRule(a, self.shape, i, j)
if a[i][j] != b[i][j]:
self.updatedValues.append((i,j,b[i][j]))
2017-05-16 22:49:28 +02:00
def getField(self):
return self.matrix_b if self.a_to_b else self.matrix_a
def setValue(self, y, x, val):
2017-05-18 20:58:15 +02:00
self.matrix_a[y][x] = val
self.matrix_b[y][x] = val
2017-05-16 22:49:28 +02:00
# some testing
if __name__ == "__main__":
f = Field((160,90))
r = rule.Rule(2)
f.setRule(r)
f.setValue(2,2,1)
2017-05-18 20:58:15 +02:00
steps = 10
t_start = time.time()
for i in range(steps):
#print(f.getField())
f.update()
t_end = time.time()
print("average time per update: " + str((t_end - t_start) / steps) )