71 lines
2.4 KiB
Python
71 lines
2.4 KiB
Python
|
#! /usr/bin/env python3
|
||
|
|
||
|
#conways game of life
|
||
|
import time, random, copy
|
||
|
|
||
|
width = 100
|
||
|
hight = 50
|
||
|
nextCells = []
|
||
|
currentCells = []
|
||
|
|
||
|
def createInitalBoard(): #create inital board
|
||
|
for x in range(width):
|
||
|
column = [] #add a column
|
||
|
for y in range(hight):
|
||
|
if random.randint(0, 1) == 0:
|
||
|
column.append('#') #add a living cell
|
||
|
else:
|
||
|
column.append(' ') #add a dead cell
|
||
|
nextCells.append(column) #append the newly created random column
|
||
|
def printBoard():
|
||
|
for y in range(hight):
|
||
|
for x in range(width):
|
||
|
print(nextCells[x][y], end='')
|
||
|
print()#print a newline at the end of the row.
|
||
|
print('\n\n\n\n\n') #seperate each step with newlines
|
||
|
|
||
|
def updateBoard():
|
||
|
currentCells = copy.deepcopy(nextCells) #create a buffer of the grid to work on.
|
||
|
for x in range(width):
|
||
|
for y in range(hight):
|
||
|
#get neighboring cordinates
|
||
|
#% width makes the board wrap.
|
||
|
leftCoord = (x-1)%width
|
||
|
rightCoord = (x+1)%width
|
||
|
aboveCoord = (y-1)%hight
|
||
|
belowCoord = (y+1)%hight
|
||
|
|
||
|
numNeighbors = 0
|
||
|
#count the number of living neighbors
|
||
|
if currentCells[leftCoord][aboveCoord] == '#':
|
||
|
numNeighbors +=1 #top left
|
||
|
if currentCells[x][aboveCoord] == '#':
|
||
|
numNeighbors +=1 #top
|
||
|
if currentCells[rightCoord][aboveCoord] == '#':
|
||
|
numNeighbors +=1 #top right
|
||
|
if currentCells[leftCoord][y] == '#':
|
||
|
numNeighbors +=1 #left
|
||
|
if currentCells[rightCoord][y] == '#':
|
||
|
numNeighbors +=1 #right
|
||
|
if currentCells[leftCoord][belowCoord] == '#':
|
||
|
numNeighbors +=1 #bottom left
|
||
|
if currentCells[x][belowCoord] == '#':
|
||
|
numNeighbors +=1 #bottom
|
||
|
if currentCells[rightCoord][belowCoord] == '#':
|
||
|
numNeighbors +=1 #bottom right
|
||
|
|
||
|
#set cell state based on conways rules
|
||
|
if currentCells[x][y] == '#' and (numNeighbors == 2 or numNeighbors == 3):
|
||
|
nextCells[x][y] = '#'
|
||
|
elif currentCells[x][y] == ' ' and numNeighbors == 3:
|
||
|
nextCells[x][y] = '#'
|
||
|
else:
|
||
|
nextCells[x][y] = ' '
|
||
|
|
||
|
createInitalBoard()
|
||
|
|
||
|
while True: #main loop
|
||
|
printBoard()
|
||
|
updateBoard()
|
||
|
time.sleep(.1)
|