import pygame from random import * BREITE = 20 HOEHE = 20 LAENGE = 40 # Wahrscheinlichkeit für Fels: p_fels = 0.4 def zeichne_quadrat(x, y, farbe): rechteck = pygame.Rect(x*LAENGE, HOEHE*LAENGE-y*LAENGE-LAENGE, LAENGE, LAENGE) pygame.draw.rect(surface=fenster, color=farbe, rect=rechteck) pygame.init() pygame.display.set_caption("Simulation: Versickerung") uhr = pygame.time.Clock() fenster = pygame.display.set_mode((BREITE*LAENGE, HOEHE*LAENGE)) # Farben für die drei Zustände: LUFT = [0, 0, 0] FELS = [100, 110, 130] WASSER = [0, 0, 200] zustand = [[LUFT for y in range(HOEHE)] for x in range(BREITE)] # Setze den Zustand aller Felder in der obersten Zeile auf Wasser. # Gehe alle restlichen Felder durch und setze den Zustand # mit Wahrscheinlichkeit p_fels auf FELS. pygame.key.set_repeat(400, 100) weiter = False while True: for ereignis in pygame.event.get(): if ereignis.type == pygame.QUIT: exit() elif ereignis.type == pygame.KEYDOWN: if ereignis.key == pygame.K_SPACE: weiter = True elif ereignis.key == pygame.K_q: exit() if weiter: neu = [[zustand[x][y] for y in range(HOEHE)] for x in range(BREITE)] # Ändere die Kopie ("deep copy") neu des aktuellen Zustands zustand so, dass # alle zu Wasserfeldern benachbarten Luftfelder zu Wasser werden. zustand = [[neu[x][y] for y in range(HOEHE)] for x in range(BREITE)] weiter = False for x in range(BREITE): for y in range(HOEHE): zeichne_quadrat(x, y, zustand[x][y]) pygame.display.flip() uhr.tick(100)