Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/data/en/graphics/life
diff options
context:
space:
mode:
Diffstat (limited to 'data/en/graphics/life')
-rw-r--r--data/en/graphics/life98
1 files changed, 98 insertions, 0 deletions
diff --git a/data/en/graphics/life b/data/en/graphics/life
new file mode 100644
index 0000000..c6d79cb
--- /dev/null
+++ b/data/en/graphics/life
@@ -0,0 +1,98 @@
+# -*- coding: utf-8 -*-
+# This is the game life http://en.wikipedia.org/wiki/Conway%27s_Game_of_Life
+
+import os
+import time
+import random
+
+
+def LoadCells(rows, cols):
+ """ We need a function to load cells in the neighborhood """
+ grid = []
+ col = [0] * cols
+ # first we load an empty grid
+ for i in range(rows):
+ col = [0] * cols
+ grid.append(col)
+ # then we load some cells
+ for x in range(rows):
+ for y in range(cols):
+ cell = random.randint(0, random.randint(0, 1))
+ grid[x][y] = cell
+ return grid
+
+
+def DrawGrid(grid):
+ """ Here we draw the grid """
+ rows = len(grid)
+ cols = len(grid[1])
+ for x in range(rows):
+ for y in range(cols):
+ if grid[x][y] != 1:
+ print '.',
+ else:
+ print 'o',
+ print '\n',
+
+
+def CountNeighbors(grid, x, y):
+ """ Count neighbors arround a single cell"""
+
+ neighbors = 0
+ rows = len(grid)
+ cols = len(grid[1])
+
+ if x < (rows - 1) and grid[x + 1][y] == 1:
+ neighbors += 1
+ if x > 0 and grid[x - 1][y] == 1:
+ neighbors += 1
+ if y < (cols - 1) and grid[x][y + 1] == 1:
+ neighbors += 1
+ if y > 0 and grid[x][y - 1] == 1:
+ neighbors += 1
+ if x < (rows - 1) and y < (cols - 1) and grid[x + 1][y + 1] == 1:
+ neighbors += 1
+ if x > 0 and y > 0 and grid[x - 1][y - 1] == 1:
+ neighbors += 1
+ if x > 0 and y < (cols - 1) and grid[x - 1][y + 1] == 1:
+ neighbors += 1
+ if x < (rows - 1) and y > 0 and grid[x + 1][y - 1] == 1:
+ neighbors += 1
+
+ return neighbors
+
+
+def Iteration(grid):
+ """ here we define a single iteration
+ if we have between 3 and 6 neighbors the single cell lives
+ in other case the cell dies
+ """
+ rows = len(grid)
+ cols = len(grid[1])
+ neighbors = 0
+ for x in range(rows):
+ for y in range(cols):
+ neighbors = CountNeighbors(grid, x, y)
+ if grid[x][y] == 1:
+ if neighbors < 2 or neighbors > 3:
+ grid[x][y] = 0
+ else:
+ if neighbors == 3:
+ grid[x][y] = 1
+
+
+def Iterator(rows, cols, pulses):
+ """ Iterate n pulses and draws the result of each one """
+ pulse = 1
+ grid = LoadCells(rows, cols)
+ while pulse <= pulses:
+ os.system('clear')
+ print 'Pulse: ', pulse
+ Iteration(grid)
+ DrawGrid(grid)
+ pulse += 1
+ time.sleep(0.2)
+
+number = input('Please input the number of rows and cols (unique number):')
+pulses = input('Please input the number of pulses:')
+Iterator(number, number, pulses)