import pygame import random maxx = 10 maxy = 10 pixel_pro_einheit = 40 breite = maxx * pixel_pro_einheit hoehe = maxy * pixel_pro_einheit def zeichne_quadrat(x, y, farbe="white"): rechteck = pygame.Rect(x*pixel_pro_einheit, y*pixel_pro_einheit, pixel_pro_einheit, pixel_pro_einheit) pygame.draw.rect(fenster, farbe, rechteck) def linie(x0, y0, x1, y1, farbe="white"): pygame.draw.line(fenster, farbe, (x0*pixel_pro_einheit, y0*pixel_pro_einheit), (x1*pixel_pro_einheit, y1*pixel_pro_einheit)) def zeichne_spielfeld(zustand): fenster.fill("black") for x in range(maxx): for y in range(maxy): if zustand[x][y] != "black": zeichne_quadrat(x, y, zustand[x][y]) for x in range(maxx+1): linie(x, 0, x, maxy+1, "gray60") for y in range(maxy+1): linie(0, y, maxx+1, y, "gray60") pygame.display.flip() def neuer_zustand(alt): # Erzeugt ein 2-dimensionales Array (= Liste von Listen) # der Grösse maxx mal maxy. Alle Einträge sind "black". neu = [["black" for y in range(maxy)] for x in range(maxx)] for x in range(maxx): for y in range(maxy): # Die folgende Zeile ist mit einigen Zeilen Code so zu ersetzen, # dass das Game of Life simuliert wird. # Zähle zunächst die Anzahl der lebendigen Nachbarn des Feldes (x, y). neu[x][y] = alt[x][(y-1) % maxy] return neu print("Game of Life") print("Space key: single time step") print("r key: run/stop simulation") pygame.init() fenster = pygame.display.set_mode((breite+1, hoehe+1)) pygame.display.set_caption("Game of Life") # Erzeugt ein 2-dimensionales Array (= Liste von Listen) # der Grösse maxx mal maxy. # Die Einträge sind "black" oder "white", jeweils mit Wahrscheinlichkeit 0.5. zustand = [["black" if random.random() < 0.5 else "white" for y in range(maxy)] for x in range(maxx)] zeit = 0 print(f'{zeit=}') zeichne_spielfeld(zustand) ende = False stop = True einzelschritt = True while not ende: if not stop: zustand = neuer_zustand(zustand) zeit += 1 print(f'{zeit=}') zeichne_spielfeld(zustand) pygame.time.delay(500) if einzelschritt: stop = True else: pygame.display.update() for ereignis in pygame.event.get(): if ereignis.type == pygame.QUIT: ende = True elif ereignis.type == pygame.KEYDOWN: if ereignis.key in {pygame.K_q, pygame.KMOD_SHIFT+pygame.K_q, pygame.K_ESCAPE}: ende = True elif ereignis.key == pygame.K_r: stop = not stop einzelschritt = False elif ereignis.key == pygame.K_SPACE: stop = False einzelschritt = True pygame.image.save(fenster, "gol.jpg") pygame.quit()