"""
Vi vil her lave en Matrix lignende animation, med de 25 LED.
Hvad skal vi bruge?
Random kollonne valg (0 til 4)
Random lysstyrke (1 til 9)
Random faldhastighed (1 til 10)

Hvergang der faldes, skal de eksisterende LED rykkes ned på næste linie, og en ny sættes i toppen.
Når en hel kollonne har været fyldt ud, skal der ikke længere sættes en ny LED, i toppen.
Når alle LED, i en kollonne er faldet ned, startes forfra.

Der skal holdes styr, på hver eneste LED, deres lysstyrke, faldhastighed, og om de er faldet ud.
"""
from microbit import *
from collections import deque

kol_1 = [0, 0, 0, 0, 0]
kol_2 = [0, 0, 0, 0, 0]
kol_3 = [0, 0, 0, 0, 0]
kol_4 = [0, 0, 0, 0, 0]
kol_5 = [0, 0, 0, 0, 0]

d_kol_1 = deque(kol_1)
d_kol_2 = deque(kol_2)
d_kol_3 = deque(kol_3)
d_kol_4 = deque(kol_4)
d_kol_5 = deque(kol_5)

matrix = {1: d_kol_1, 2: d_kol_2, 3: d_kol_3, 4: d_kol_4, 5: d_kol_5}


# Hver LED representation, skal kun holde styr på sig selv.
class LED:
    def __init__(self, kol, lys, hast):
        self.kol = []
        self.i_live = True # Vi starter med at være i live.
        self.række = 0 # Vi starter på øverste række.
        self.kollonne = kol # Vi ved hvilken kollonne vi er i.
        self.lys = lys # Vi sætter vores lysstyrke.
        self.hastighed = hast # Vi falder med en konstant hastighed.
        self.vis_led() # Tænd led
    
    def fald(self):
        self.række += 1 # Ryk til næste række
        self.lys -= 1
        if self.række > 4:
            self.i_live = False
        else:
            self.vis_led()
            self.matrix.ny_led(self.kol, self.lys, self.hastighed)

    def vis_led(self):
        display.set_pixel(self.kollonne, self.række, self.lys)

while True:
    kol = random(1, 5)
    lys = random(5, 9)
    hast = random(1, 10)

    for k in matrix:
        matrix[k].pop()
        matrix[k].appendleft(0)