From 3b272b80dfa51d44cf0fbd5a5add57556be1fcc5 Mon Sep 17 00:00:00 2001
From: phwitte <phillip_witte@gmx.de>
Date: Tue, 4 Sep 2018 13:54:12 +0000
Subject: [PATCH] Update Life.py

---
 Life.py | 31 +++++++++++++++++++++++--------
 1 file changed, 23 insertions(+), 8 deletions(-)

diff --git a/Life.py b/Life.py
index 3a0979f..4f61c9a 100644
--- a/Life.py
+++ b/Life.py
@@ -15,7 +15,7 @@ matplotlib.use('TkAgg')
 import matplotlib.pyplot as pyplot
 
 
-def circleArray(r1, r2, weight, oval=0, ovalscaling= 2, invers=False, xshift = 0, yshift= 0):
+def circleArray(r1, r2, weight, oval=0, ovalscaling= 2, invers=False, xshift = 1, yshift= 1):
 
     width =2*r2+1
     height=2*r2+1
@@ -61,7 +61,7 @@ def circleArray(r1, r2, weight, oval=0, ovalscaling= 2, invers=False, xshift = 0
 
     return map_
 
-def squareArray(r1, r2, weight, rect=1, rectscaling= 2):
+def squareArray(r1, r2, weight, rect=0, rectscaling= 2):
 
     width = 2*r2+1
     height=2*r2+1
@@ -93,7 +93,7 @@ class Life(object):
     n:     the number of rows and columns
     """
 
-    def __init__(self, n, mode='wrap', random = True, p=0.001, radius1 = 3, radius2 = 6, weight=-0.5, doubleStates = False, inversion = False):
+    def __init__(self, n, mode='wrap', random = False, p=0.001, radius1 = 3, radius2 = 6, weight=-0.25, doubleStates = True, inversion = False):
         """Attributes:
         n:      number of rows and columns
         mode:   how border conditions are handled
@@ -141,18 +141,31 @@ class Life(object):
         """Executes one time step."""
         con = scipy.ndimage.filters.convolve(self.array,
                                              self.weights,
-                                             mode=self.mode)
+                                             mode=self.mode, cval=0.0 )
 
         #boolean = (con==3) | (con==12) | (con==13)
+        sideBorders = True
+        topbotBorders = True
         if (not self.doubleStates):
             boolean = (con >= 1)
+            for y in range(self.n):
+                for x in range(self.n):
+                    if sideBorders and ((x < self.radius2) or (x > self.n-self.radius2)):
+                        boolean[y][x] = True
+                    if topbotBorders and ((y < self.radius2) or (y > self.n-self.radius2)):
+                        boolean[y][x] = True
+
             self.array = numpy.int8(boolean)
         else:
+            print ("doublestates")
             values = [[ 0 for x in range(self.n)] for y in range(self.n)]
-
             for y in range(self.n):
                 for x in range(self.n):
-                    if con[y][x] >= 4*self.radius2:
+                    if sideBorders and ((x < self.radius2) or (x > self.n-self.radius2)):
+                        values[y][x] = 0
+                    if topbotBorders and ((y < self.radius2) or (y > self.n-self.radius2)):
+                        values[y][x] = 0
+                    elif con[y][x] >= 2*self.radius2:
                         values[y][x] = 2
                     elif con[y][x] >= 1:
                         values[y][x] = 1
@@ -185,19 +198,21 @@ class LifeViewer(object):
         self.pcolor = pyplot.pcolor(a, cmap=self.cmap)
         self.fig.canvas.draw()
 
-    def animate(self, steps=10):
+    def animate(self, steps=1):
         """Creates the GUI and then invokes animate_callback.
 
         Generates an animation with the given number of steps.
         """
         self.steps = steps
         self.fig.canvas.manager.window.after(1000, self.animate_callback)
+        self.fig.savefig('/home/phill/Cell_Automata/test_0/pic.png')
         pyplot.show()
 
     def animate_callback(self):
         """Runs the animation."""
         for i in range(self.steps):
             self.life.step()
+            self.fig.savefig('/home/phill/Cell_Automata/test_0/pic' + str(i)+ '.png')
             self.update()
 
         print ('end')
@@ -209,7 +224,7 @@ def main(script, n=20, radius1 = 5, radius2 = 10,p= 0.1, weight=-0.5, doubleStat
     life = Life(n, random=True, radius1 = radius1, radius2 = radius2, p = p, weight = weight, doubleStates=doubleStates, inversion=inversion)
     #life.add_glider(10, 10)
     viewer = LifeViewer(life)
-    viewer.animate(steps=100)
+    viewer.animate(steps=10)
 
 """ df """
 
-- 
GitLab