Skip to content

Commit

Permalink
[other] Added Conway's Game of Life Experiment.
Browse files Browse the repository at this point in the history
  • Loading branch information
anuragkumarak95 committed Oct 26, 2017
1 parent da58cd9 commit f1621c4
Show file tree
Hide file tree
Showing 2 changed files with 118 additions and 0 deletions.
118 changes: 118 additions & 0 deletions other/game_of_life/game_o_life.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,118 @@
'''Conway's Game Of Life, Author Anurag Kumar(mailto:[email protected])
Requirements:
- numpy
- random
- time
- matplotlib
Python:
- 3.5
Usage:
- $python3 game_o_life <canvas_size:int>
Game-Of-Life Rules:
1.
Any live cell with fewer than two live neighbours
dies, as if caused by under-population.
2.
Any live cell with two or three live neighbours lives
on to the next generation.
3.
Any live cell with more than three live neighbours
dies, as if by over-population.
4.
Any dead cell with exactly three live neighbours be-
comes a live cell, as if by reproduction.
'''
import numpy as np
import random, time, sys
from matplotlib import pyplot as plt
import matplotlib.animation as animation
from matplotlib.colors import ListedColormap

usage_doc='Usage of script: script_nama <size_of_canvas:int>'

choice = [0]*100 + [1]*10
random.shuffle(choice)

def create_canvas(size):
canvas = [ [False for i in range(size)] for j in range(size)]
return canvas

def seed(canvas):
for i,row in enumerate(canvas):
for j,_ in enumerate(row):
canvas[i][j]=bool(random.getrandbits(1))

def run(canvas):
''' This function runs the rules of game through all points, and changes their status accordingly.(in the same canvas)
@Args:
--
canvas : canvas of population to run the rules on.
@returns:
--
None
'''
canvas = np.array(canvas)
next_gen_canvas = np.array(create_canvas(canvas.shape[0]))
for r, row in enumerate(canvas):
for c, pt in enumerate(row):
# print(r-1,r+2,c-1,c+2)
next_gen_canvas[r][c] = __judge_point(pt,canvas[r-1:r+2,c-1:c+2])

canvas = next_gen_canvas
del next_gen_canvas # cleaning memory as we move on.
return canvas.tolist()

def __judge_point(pt,neighbours):
dead = 0
alive = 0
# finding dead or alive neighbours count.
for i in neighbours:
for status in i:
if status: alive+=1
else: dead+=1

# handling duplicate entry for focus pt.
if pt : alive-=1
else : dead-=1

# running the rules of game here.
state = pt
if pt:
if alive<2:
state=False
elif alive==2 or alive==3:
state=True
elif alive>3:
state=False
else:
if alive==3:
state=True

return state


if __name__=='__main__':
if len(sys.argv) != 2: raise Exception(usage_doc)

canvas_size = int(sys.argv[1])
# main working structure of this module.
c=create_canvas(canvas_size)
seed(c)
fig, ax = plt.subplots()
fig.show()
cmap = ListedColormap(['w','k'])
try:
while True:
c = run(c)
ax.matshow(c,cmap=cmap)
fig.canvas.draw()
ax.cla()
except KeyboardInterrupt:
# do nothing.
pass
Binary file added other/game_of_life/sample.gif
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.

0 comments on commit f1621c4

Please sign in to comment.