It is an immemorial game which I really hope you can enjoy.
#coding: utf-8
import time
import numpy as np
import subprocess
class LifeSpace:
def __init__(self, name, israndom, size_x, size_y):
self.name = name
self.israndom = israndom
self.size = (size_x, size_y)
self.iter_times = 0
self.Z = Z = np.random.randint(0, 2, self.size)
def iterate(self):
# Count neighbours
N = (self.Z[0:-2, 0:-2] + self.Z[0:-2, 1:-1] + self.Z[0:-2, 2:] +
self.Z[1:-1, 0:-2] + self.Z[1:-1, 2:] +
self.Z[2: , 0:-2] + self.Z[2: , 1:-1] + self.Z[2: , 2:])
# Apply rules
birth = (N == 3) & (self.Z[1:-1, 1:-1] == 0)
survive = ((N == 2) | (N == 3)) & (self.Z[1:-1, 1:-1] == 1)
self.Z[...] = 0
self.Z[1:-1, 1:-1][birth | survive] = 1
# Iterate update
self.iter_times += 1
def get_Z_status(self):
print("--"*(self.size[0]/2) + str(self.iter_times) + "--"*(self.size[0]/2))
line = ''
for i in self.Z:
for j in i: line += "■" if j == 1 else "□"
print line
line = ''
def process(self, iter_time):
for i in range(iter_time):
self.iterate()
self.get_Z_status()
time.sleep(0.3)
subprocess.call("clear")
if __name__ == "__main__":
newspace = LifeSpace("Elf", True, 15, 30)
newspace.process(1000)
BTW, You can also find it at Github.