''' Ver. 4 GAME OF LIFE - https://playgameoflife.com/ '''
from machine import Pin
from neopixel import NeoPixel
from time import sleep
zeile_max = 20 # Ändere 'rows' in 'diagram.json
spalte_max = 32 # Ändere 'cols' in 'diagram.json
NUM_LEDS = zeile_max * spalte_max
pixels = NeoPixel(Pin(2), NUM_LEDS)
schritt = Pin(4, Pin.IN, Pin.PULL_UP) # gelb - Einzelschritt
autom = Pin(5, Pin.IN, Pin.PULL_UP) # grau - automatisch EIN/AUS
automatisch = False
rot = (255,0,0)
tod = (0,0,0)
lebend = (0,255,0)
geboren = (0,0,128)
stirbt = (128,0,0)
def pixel(z,s,f):
if z%2==0:
s = spalte_max - (s-1)
pixels[(z-1)*spalte_max + (s-1)] = f
zelle = []; zelle_neu = []
for z in range(zeile_max+2):
zelle.append([]); zelle_neu.append([])
for s in range(spalte_max+2):
zelle[z].append(0); zelle_neu[z].append(0)
z = zeile_max//2
s = spalte_max//2
#zelle[z][s-1] = zelle[z][s] = zelle[z][s+1] = 1
muster = ["xx#xxx",
"x#####",
"x#x#x#"]
zstart = 10; sstart=10;
z = zstart
for m in muster:
s = sstart
for zeichen in m:
s = s + 1
if zeichen == " ":
zelle[z][s] = 0
else:
zelle[z][s] = 1
z = z + 1
for z in range(1, zeile_max+1):
for s in range(1, spalte_max+1):
if zelle[z][s] == 1:
pixel(z,s, lebend)
else:
pixel(z,s, tod)
pixels.write()
#for i in range(40):
weiter = True
while weiter:
print(".", end="")
for z in range(1, zeile_max+1):
for s in range(1, spalte_max+1):
anz = zelle[z-1][s-1] + zelle[z-1][s] + zelle[z-1][s+1]
anz += zelle[z][s-1] + zelle[z][s+1]
anz += zelle[z+1][s-1] + zelle[z+1][s] + zelle[z+1][s+1]
if zelle[z][s] == 0: # tote Zelle
if anz == 3: # mit genau 3 lebenden Zellen
zelle_neu[z][s] = 1 # wird lebendig
else:
zelle_neu[z][s] = 0 # bleibt tot
else: # lebende Zelle
if anz==2 or anz==3: #mit 2 oder 3 lebenden Zellen
zelle_neu[z][s] = 1 # bleibt am Leben
else: # nichtlebende Zelle
zelle_neu[z][s] = 0 # stirbt
anz = 0
for z in range(1, zeile_max+1):
for s in range(1, spalte_max+1):
if zelle_neu[z][s] == 1:
if zelle[z][s] == 0:
pixel(z, s, geboren)
anz += 1
else:
pixel(z, s, lebend) # bleibt am Leben
zelle[z][s] = 1
else:
if zelle[z][s] == 1:
pixel(z, s, stirbt)
anz += 1
else:
pixel(z, s, tod) # bleibt tod
zelle[z][s] = 0
pixels.write()
if not automatisch:
while schritt.value() and not automatisch: # Warte auf Drücken des Tasters
if autom.value()==0:
print("Automatisch ON")
automatisch = True
sleep(0.5)
pass
else:
if autom.value()==0:
print("Automatisch OFF")
automatisch = False
sleep(0.5)
if anz == 0:
weiter = False
print("Spiel wurde beendet")