69 lines
1.7 KiB
Python
69 lines
1.7 KiB
Python
import rule
|
|
import time
|
|
|
|
class Field(object):
|
|
def __init__(self, shape = (32,32)):
|
|
self.resize(shape)
|
|
self.a_to_b = True
|
|
self.rule = rule.Rule(0)
|
|
self.updatedValues = [] # tuple (i,j, newValue)
|
|
|
|
def setRule(self, rule):
|
|
self.rule = rule
|
|
|
|
def resize(self, shape):
|
|
self.shape = shape
|
|
|
|
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
|
|
|
|
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)
|
|
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]))
|
|
|
|
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)
|
|
|
|
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) ) |