forked from Blinkenbunt/blup
1 changed files with 91 additions and 0 deletions
@ -0,0 +1,91 @@
@@ -0,0 +1,91 @@
|
||||
import sys |
||||
import ast |
||||
import time as t |
||||
import random as r |
||||
import blup.animation |
||||
import blup.frame |
||||
import writebml |
||||
|
||||
r.seed() |
||||
|
||||
WIDTH = 22 |
||||
HEIGHT = 16 |
||||
|
||||
COLOR_DEPTH = 256 |
||||
COLORS = 3 |
||||
DELAY = 300 |
||||
|
||||
DEAD = 0 |
||||
DEADCOLOR = (0,0,0) |
||||
ALIVE = 1 |
||||
ALIVECOLOR = (0,255,0) |
||||
|
||||
dimension = blup.frame.FrameDimension(WIDTH, HEIGHT, COLOR_DEPTH, COLORS) |
||||
animation = blup.animation.Animation(dimension) |
||||
|
||||
def generateRandomGameBoard(): |
||||
gameBoard = [] |
||||
for i in range(HEIGHT): |
||||
xCoordinates = [] |
||||
for j in range(WIDTH): |
||||
xCoordinates.append(r.randint(0, 1)) |
||||
gameBoard.append(xCoordinates) |
||||
return gameBoard |
||||
|
||||
def get_neighbors(x, y): |
||||
for rowNumber in range(y-1, y+2): |
||||
if 0 <= rowNumber < HEIGHT: |
||||
for colNumber in range(x-1, x+2): |
||||
if 0 <= colNumber < WIDTH: |
||||
if not (y==rowNumber and x==colNumber): |
||||
yield gameBoard[rowNumber][colNumber] |
||||
|
||||
if len(sys.argv) == 1: |
||||
gameBoard = generateRandomGameBoard() |
||||
gameBoardIsSanitized = True |
||||
elif len(sys.argv) != 2: |
||||
print("check args. found "+str(len(sys.argv))) |
||||
exit() |
||||
|
||||
if not gameBoardIsSanitized: |
||||
gameBoard = ast.literal_eval(sys.argv[1]) |
||||
|
||||
if len(gameBoard) != HEIGHT: |
||||
print("len(gameBoard) != "+str(HEIGHT)+". counted "+str(len(gameBoard))) |
||||
exit() |
||||
|
||||
for i in gameBoard: |
||||
if len(i) != WIDTH: |
||||
print("len(rows) != "+str(WIDTH)+". counted "+str(len(i))) |
||||
exit() |
||||
|
||||
for frame in range(500): |
||||
# construct frame |
||||
newframe = blup.animation.AnimationFrame(dimension, DELAY) |
||||
for rowIndex in range(HEIGHT): |
||||
for colIndex in range(WIDTH): |
||||
cellStatus = gameBoard[rowIndex][colIndex] |
||||
if cellStatus == ALIVE: |
||||
newframe.setPixel(colIndex, rowIndex, ALIVECOLOR) |
||||
else: |
||||
newframe.setPixel(colIndex, rowIndex, DEADCOLOR) |
||||
animation.addFrame(newframe) |
||||
|
||||
# calculate next step |
||||
gameBoardNextStep = [] |
||||
for rowIndex in range(HEIGHT): |
||||
newRow = [] |
||||
for colIndex in range(WIDTH): |
||||
neighborList = list(get_neighbors(colIndex, rowIndex)) |
||||
aliveNeighbors = neighborList.count(1) |
||||
if aliveNeighbors < 2: |
||||
newRow.append(DEAD) |
||||
elif aliveNeighbors == 2: |
||||
newRow.append(gameBoard[rowIndex][colIndex]) |
||||
elif aliveNeighbors == 3: |
||||
newRow.append(ALIVE) |
||||
elif aliveNeighbors >= 4: |
||||
newRow.append(DEAD) |
||||
gameBoardNextStep.append(newRow) |
||||
gameBoard = gameBoardNextStep |
||||
writebml.writeBml(animation, '/home/pi/animations/gameOfLife.bml') |
Loading…
Reference in new issue