@startuml
'https://plantuml.com/activity-diagram-beta

start

:**neue Liste für Daten erstellen**
             new_specific_list();
:**einlesen der settings.txt**
          read_settings();
while(Zeileninhalt vorhanden)
:String und Zahl einlesen;
switch(String)
    case (Zeilenumbruch)
    :überspringen

    continue;
    case (Zeilen)
    :X setzen;
    case (Spalten)
    :Y setzen;
    case (Schritt)
    :Counter setzen;
    case (Schritte)
    :maximalen Counter setzen;
    case (Pause)
    :Verzögerung(delay) setzen;
    case (Animationspuffer)
    :Puffer erreicht = 1
    
    continue;
endswitch
if (puffer erreicht)
:Zeilen des Puffers zusammenfügen; 
else if (puffer erreicht && Zeilenumbruch)
:Puffer mittig in Pixel-Array einfügen; 
endif
endwhile

:**initialisieren der Ausgaben,wenn das Programm beendet wird**
                                              init_exit();
:**initialisieren des Ausgabefensters**
                     init_frame();
while (**1**)
:**Daten des Animationspuffers in Fenster ausgeben**
                      print_animation_buffer();
while(nächtes zu zeichnendes Pixel)

if (Pixel == 1) then (ja)
  :Pixel in Golden_Fizz zeichnen;
  else (nein)
  :Pixel in Rainforest zeichnen;
endif

endwhile(alle Pixel gezeichnet)
:**Nutzereingaben verarbeiten**
                      ui();

switch (Tastatureingabe)
case ( Beenden (q))
  stop
case ( Pause (Leertaste))
  :Programm pausiert bis wieder Leertaste;
case (           Pause & nächster Schritt (.) )
  :                              Programm pausiert
   Darstellung & Berechnung des nächsten Animationsschritts

                             cal_nextAnimationStep()
                             print_animation_buffer();

case ( default)
  :**Berechnung des nächsten Animationsschritts**
                       cal_nextAnimationStep();
  :Programm pausiert bestimmte Zeit;


endswitch

endwhile;

stop


start
:**cal_nextAnimationStep**;
while(iteration über alle Pixel des Animationspuffers)
while(iteration über die Nachbarn des aktuellen Pixels)
if(Nachbarpixel == 1) then(ja)
:belegte Nachbarn +1;
elseif(Nachbarpixel liegt außerhalb des Animationspuffers)
endif
endwhile(fertig)
if(aktuelles Pixel == 0 && belegte Nachbarn == 3)then(ja)
:selbes Pixel im neuem Animationspuffer == 1;
elseif(aktuelles Pixel == 1 && belegte Nachbarn == 2||3)then(ja)
:selbes Pixel im neuem Animationspuffer == 1;
elseif(aktuelles Pixel == 1 && belegte Nachbarn < 2)then(ja)
:selbes Pixel im neuem Animationspuffer == 0;
elseif(aktuelles Pixel == 1 && belegte Nachbarn > 3)then(ja)
:selbes Pixel im neuem Animationspuffer == 0;
endif

endwhile(fertig)
:überschreiben des Animationspuffers mit dem neu berechnetem Animationspuffer ;
:Animationszähler +1;
stop


@enduml
