#include <Adafruit_NeoPixel.h> // Einbinden der NeoPixel Bibliothek
int anzahl = 48;  //Variable anzahl für die anzahl an LED´s
Adafruit_NeoPixel strip(anzahl, 6, NEO_GRB + NEO_KHZ800); //Grundeinstellung NeoPixel LED´s
//1.wert: Anzahl an LED´s , 2.Wert: PIN Nummer, 3.Wert: Art von LED

long rot = strip.Color(255, 0, 0); long gruen = strip.Color(0, 255, 0); long farbe = 0; // Variablen für die RGB werte
byte zw1 = 0; int zw2 = 0; // werden in "Ausgabe Spielfeld" benutzt
byte zw3 = 0; // wird in Absenken der Spielsteine benutzt
byte zw4 = 0; // Variable für das Startfeld beim Testen
byte zw5 = 0; // Zählwert innere Schleife, testet 4 Felder
byte zw6 = 0; // Zählwert mittler Schleife, testet eine Spalte
byte zw7 = 0; // Zählwert außer Schleife, testet alle Spalten
byte zw8 = 0; // Variable für die Gefallenen Steine
byte zw9 = 0; // Variable für die Ausgabe Siegerfarbe
byte zw10 = 0; //Löschen von Anzeige und Spielfeld
byte zw11 = 0; //Blinken Siegersteine
long farbe_1 = 0; long farbe_2 = 0; // Variable für die Siegerfarbe
byte position_1 = 0; byte position_2 = 0; byte position_3 = 0; byte position_4 = 0; //Variable für die Position der Gewinnersteine

// 0 -> nicht belegt; 1 -> rot; 2 -> grün
byte spielfeld [48] = {
  1, 0, 0, 0, 0, 0, 0, 0,
  0, 0, 0, 0, 0, 0, 0, 0,
  0, 0, 0, 0, 0, 0, 0, 0,
  0, 0, 0, 0, 0, 0, 0, 0,
  0, 0, 0, 0, 0, 0, 0, 0,
  0, 0, 0, 0, 0, 0, 0, 0
};//Array mit dem Spielfeld

byte rechts = 9; byte links = 11; byte runter = 10; // Nummer der benoetigten Ports für Taster

byte richtung = 0 ; // 1 -> rechts; 2 -> links; 3 -> runter
byte status_start = 1; //Variable für einstellung der Farbe für den begin des Spiels: 1 -> rot; 2 -> grün
byte status_spiel = 1 ; //Variable für Wechsel der Spielerfarbe während des Spiels: 1 -> rot; 2 -> grün
byte position_0 = 0; // Zeiger für Spielfeld
byte test_rot = 0; byte test_gruen = 0; byte sieger = 0; // Benoetigt zum Ermitteln des Siegers

void setup() { // Begin des "void setup()"

  Serial.begin(9600);  // Öffnet die serielle Schnittstelle und stellt die Datenrate auf 9600 Bit/s ein

  strip.begin(); // Initialisierung von den Pixels
  strip.show();  //Neopixel initialissierung anschalten der LED´s // Initialisierung aller Pixels auf 'aus'

  pinMode(rechts, INPUT); digitalWrite (rechts, HIGH);  //Variable "rechts" wird als "INPUT" festgelegt und auf "HIGH" gesetzt
  pinMode(links, INPUT); digitalWrite (links, HIGH);  //Variable "links" wird als "INPUT" festgelegt und auf "HIGH" gesetz
  pinMode(runter, INPUT); digitalWrite (runter, HIGH);  //Variable "runter" wird als "INPUT" festgelegt und auf "HIGH" gesetz

  ausgabe_spielfeld (); // Aufruf der Funktion "ausgabe_spielfeld()"

}//Ende des "void setup()"

void loop() { //Begin des "void loop()"

  // Abfrage Tastatur und Sprung in entsprechende Funktion

  do { //Begin der do-while-Schleife

    if (digitalRead(rechts) == LOW && digitalRead(links) == LOW) { // Abfrage ob "rechts" und "links" beide auf "LOW" sind
      zw8 = 40; //Variable "zw8" bekommt den Zahlenwert 56
      test_spielende (); //Aufruf der Funktion "test_spielende()"
    };  //Ende der if-abfrage
    if ( digitalRead(rechts) == LOW) { // Abfrage ob "rechts" "LOW" ist
      richtung = 1; rechts_0 (); //Variable "richtung" wir auf "1" gesetzt & Funktion "rechts_0()" wird aufgerufen
    } //Ende der if-abfrage
    if ( digitalRead(links) == LOW) { // Abfrage ob "links" "LOW" ist
      richtung = 2; links_0 (); //Variable "richtung" wir auf "2" gesetzt & Funktion "links_0()" wird aufgerufen
    } //Ende der if-abfrage
    if ( digitalRead(runter) == LOW) { // Abfrage ob "runter" "LOW" ist
      if (spielfeld [position_0 + 8] == 0) { // Abfrage ob im Array an der position von dem wert der Variable "position_0" mit 8 addiert eine "0" ist
        richtung = 3; //Variable richtung wird auf 3 gesetzt
        runter_0 (); zw8 ++; // Funktion "runter_0()" aufrufen & Variable "zw8" wird hochgezählt / Anzahl Durchläufe + 1
        test_spielende ();  //Funktion "test_spielende()" wird aufgerufen
      };  //Ende der if-abfrage
    } //Ende der if-abfrage
  } //Ende des "do" teils
  while ( richtung == 0); //While Teil der do-while-Schleife, solange die Variable "richtung" genau "0" ist fürt es das do aus

  richtung = 0; // Löschen der Richtung //Variable "richtung" wird auf "0" gesetzt
  ausgabe_spielfeld (); //Funktion "ausgabe_spielfeld()" wird aufgerufen
  delay(300); //Pause von 300ms

} //Ende des "void loop()"

//  ------------- Test ob es einen Sieger gibt  ------------------
//  ---------- Funktion wird nach Absenken eines Steines aufgerufen

void test_spielende () {  //Begin Funktion "test_spielende()"

  // ----------- Test diagonal oben ------------
  // ----------3 verschaltelte Zyklen ----------

  zw4 = 32; // Startfeld beim Testen // Variable "zw4" wird auf "32" gesetzt
  sieger = 0; zw7 = 0;  //Variable "sieger" & "zw7" werden auf "0" gesetzt

  do {  //Begin der do-while-Schleife
    zw6 = 0;  //Variable "zw6" wird auf "0" gesetzt

    do {  //Begin der do-while-Schleife in der do-while-Schleife
      zw5 = 0; // Zählschleife  //Variable "zw5" wird auf "0" gesetzt
      test_rot = 0; test_gruen = 0; //Variablen "test_rot" & "test_gruen" werden auf "0" gesetzt

      // Testen 4 Zellen diegonal oben
      do {  //Begin der do-while-Schleife in der do-while-Schleife von der do-while-Schleife
        if ( spielfeld [zw4] == 1) {  //Begin if-abfrage ob im Array "spielfeld" an der position von dem wert der Variable "zw4" genau eine "1" anliegt
          test_rot ++;  //Variable "test_rot" wird hochgezählt
        };  //Ende der if-abfrage
        if ( spielfeld [zw4] == 2) {  //Begin if-abfrage ob im Array "spielfeld" an der position von dem wert der Variable "zw4" genau eine "2" anliegt
          test_gruen ++;  //Variable "test_gruen" wird hochgezählt
        };  //Ende der if-abfrage

        // Merken der Position beim Sieg
        if (sieger == 0) { //Begin if-abfrage ob die Variable "sieger" genau "0" ist
          if (zw5 == 0) { //Begin if-abfrage ob die Variable "zw5" genau "0" ist
            position_1 = zw4; //Variable "position_1" bekommt den wert der in der Variable "zw4" gespeichert ist
          };  //Ende der if-abfrage
          if (zw5 == 1) { //Begin if-abfrage ob die Variable "zw5" genau "1" ist
            position_2 = zw4; //Variable "position_2" bekommt den wert der in der Variable "zw4" gespeichert ist
          };  //Ende der if-abfrage
          if (zw5 == 2) { //Begin if-abfrage ob die Variable "zw5" genau "2" ist
            position_3 = zw4; //Variable "position_3" bekommt den wert der in der Variable "zw4" gespeichert ist
          };  //Ende der if-abfrage
          if (zw5 == 3) { //Begin Begin if-abfrage ob die Variable "zw5" genau "3" ist
            position_4 = zw4; //Variable "position_4" bekommt den wert der in der Variable "zw4" gespeichert ist
          };  //Ende der if-abfrage
        };  //Ende der if-abfrage

        zw4 = zw4 - 7; zw5++; //Variable "zw4" wird subtrahiert um "-7", Variable "zw5" wird hochgezählt
      } //Ende des do-Teils der do-while-Schleife
      while (zw5 != 4); //while-teil führt solange aus solange die Variable "zw5" nicht genau "4" entspricht

      if (test_rot == 4) {  //Begin Begin if-abfrage ob die Variable "test_rot" genau "4" entspricht
        sieger = 1; //Variable "sieger" wird auf "1" gesetzt
      } else {  //Begin else-abfrage
        test_rot = 0; //Variable "test-rot" wird auf "0" gesetzt
      };  //Ende der else-abfrage
      if (test_gruen == 4) {  //Begin if-abfrage ob die Variable "test_gruen" genau "4" entspricht
        sieger = 2; //Variable "sieger" wird auf "2" gesetzt
      } else {  //Begin else-abfrage
        test_gruen = 0; //Variable "test_gruen" wird auf "0" gesetzt
      };  //Ende der else-abfrage
      zw4 = zw4 + 36; zw6++;  //Variable "zw4" wird addiert mit "+ 36"; Variable "zw6" wird hochgezählt
      if (sieger != 0) {  //Begin if-abfrage ob die Variable "sieger" nicht genau "0" entspricht
        zw6 = 4;  //Variable "zw6" wird auf "4" gesetzt
      };  //Ende der if-abfrage
    } //Ende des do-Teils
    while ( zw6 != 4);  //While-teil solange die Variable "zw6" nicht genau dem wert "4" entspricht wird das do ausgeführt

    zw4 = zw4 - 31; zw7++;  //Variable "zw4" wird subtrahiert mit "-31"; Variable "zw7" wird hochgezählt
    if (sieger != 0) {  //Begin if-abfrage ob die Variable "sieger" nicht genau "0" entspricht
      zw7 = 5;  //Variable "zw7" wird auf "5" gesetzt
    };  //Ende der if-abfrage
  }//Ende des do-Teils der do-while-Schleife
  while (zw7 != 5); //While-Teil solange die Variable "zw7" nicht genau "5" entspricht

  // ----------- Test diagonal unten -----------
  // ----------3 verschachtelte Zyklen ----------

  zw4 = 6; // Startfeld beim Testen //Variable "zw8" wird auf "8" gesetzt
  zw7 = 0;  //Variable "zw7" wird auf "0" gesetzt

  do {  //Begin der do-while-Schleife
    zw6 = 0;  //Variable "zw6" wird auf "0" gesetzt

    do {  //Begin der do-while-Schleife
      zw5 = 0; //zaehlschleife  //Variable "zw5" wird auf "0" gesetzt
      test_rot = 0; test_gruen = 0; //Varaiblen "test_rot" & "test_gruen" werden auf "0" gesetzt

      // Testen 4 Zellen diagonal unten
      do {  //Begin der do-while-Schleife
        if ( spielfeld [zw4] == 1) {  //Begin if-abfrage ob im Array "spielfeld" an position "zw4" genau 1 ist
          test_rot ++;  //Variable "test_rot" wird hochgezählt
        };  //Ende der if-abfrage
        if ( spielfeld [zw4] == 2) {  //Begin if-abfrage ob im Array "spielfeld" an position "zw4" genau 2 ist
          test_gruen ++;  //Variable "test_gruen" wird hochgezählt
        };  //Ende der if-abfrage

        // Merken der Position beim Sieg
        if (sieger == 0) {  //Begin if-abfrage ob Variable "sieger" genau "0" ist
          if (zw5 == 0) { //Begin if-abfrage ob Variable "zw5" genau "0" ist
            position_1 = zw4; //Variable "position_1" wird auf den wert von Variable "zw4" gesetzt
          };  //Ende der if-abfrage
          if (zw5 == 1) { //Begin if-abfrage ob Variable "zw5" genau "1" ist
            position_2 = zw4; //Variable "position_2" wird auf den wert von Variable "zw4" gesetzt
          };  //Ende der if-abfrage
          if (zw5 == 2) { //Begin if-abfrage ob Variable "zw5" genau "2" ist
            position_3 = zw4; //Variable "position_3" wird auf den wert von Variable "zw4" gesetzt
          };  //Ende der if-abfrage
          if (zw5 == 3) { //Begin if-abfrage ob Variable "zw5" genau "3" ist
            position_4 = zw4; //Variable "position_4" wird auf den wert von Variable "zw4" gesetzt
          };  //Ende der if-abfrage
        };  //Ende der if-abfrage

        zw4 = zw4 + 9; zw5++; //Variable "zw4" wird addiert mit "+9"; //Variable "zw5" wird hochgezählt
      } //Ende des do-teils
      while (zw5 != 4); //while-teil solange Variable "zw5" nicht genau "4" ist

      if (test_rot == 4) {  //Begin if-abfrage ob Variable "test_rot" genau "4" ist
        sieger = 1; //Variable "sieger" wird auf "1" gesetzt
      } else {  //Ende if-abfrage //Begin else-abfrage
        test_rot = 0; //Variable "test_rot" wird auf "0" gesetzt
      };  //Ende else-abfrage
      if (test_gruen == 4) {  //Begin if-abfrage ob Variable "test_gruen" genau "4" ist
        sieger = 2; //Variable "sieger" wird auf "2" gesetzt
      } else {  //Ende if-abfrage //Begin else-abfrage
        test_gruen = 0; //Variable "test_gruen" wird auf "0" gesetzt
      };  //Ende if-abfrage
      zw4 = zw4 - 28; zw6++;  //Variable "zw4" wird subbrathiert mit "-28"; //Variable "zw6" wird hochgezählt
      if (sieger != 0) {  //Begin if-abfrage ob Variable "sieger" genau "4" ist
        zw6 = 4;  //Variable "zw6" wird auf "4" gesetzt
      };  //Ende if-abfrage
    } //Ende des do-teils
    while ( zw6 != 4);  //while-teil solange Variable "zw6" nicht genau "4" ist

    zw4 = zw4 - 31; zw7++;  //Variable "zw4" wird subbrathiert mit "-31"; //Variable "zw7" wird hochgezählt
    if (sieger != 0) {  //Begin if-abfrage ob Variable "sieger" nicht genau "0" ist
      zw7 = 5;  //Variable "zw7" wird auf "5" gesetzt
    };  //Ende if-abfrage
  } //Ende do-teil
  while (zw7 != 5); //while-teil solange  Variable "zw7" nicht genau "5" ist

  // ------------ Test senkrecht ---------------
  // ----------3 verschaltelte Zyklen ----------

  zw4 = 6; //Variable "zw4" wird auf "8" gesetzt // Startfeld beim Testen
  zw7 = 0; //Variable "zw7" wird auf "0"
  do {  //Begin do-while-Schleife
    zw6 = 0; //Variable "zw6" wird auf "0"

    do {  //Begin do-while-Schleife
      zw5 = 0; //Variable "zw5" wird auf "0" gesetzt  //zaelschleife
      test_rot = 0; test_gruen = 0; //Variablen "test_rot" & "test_gruen"wird auf "0" gesetzt

      // Testen 4 Zellen senkrecht
      do {  //Begin do-while-Schleife
        if ( spielfeld [zw4] == 1) {  //Begin if-abfrage ob im Array "spielfeld" ander position "zw4" eine "1" anliegt
          test_rot ++;  //Variable "test_rot" wird hochgezählt
        };  //Ende if-abfrage
        if ( spielfeld [zw4] == 2) {  //Begin if-abfrage ob im Array "spielfeld" ander position "zw4" eine "2" anliegt
          test_gruen ++;  //Variable "test_gruen" wird hochgezählt
        };  //Ende if-abfrage

        // Merken der Position beim Sieg
        if (sieger == 0) {  //Begin if-abfrage
          if (zw5 == 0) { //Begin if-abfrage ob Variable "zw5" genau "0" ist
            position_1 = zw4; //Variable "position_1" wird auf  den wert von der Variable "zw4" gesetzt
          };  //Ende if-abfrage
          if (zw5 == 1) { //Begin if-abfrage ob Variable "zw5" genau "1" ist
            position_2 = zw4; //Variable "position_2" wird auf  den wert von der Variable "zw4" gesetzt
          };  //Ende if-abfrage
          if (zw5 == 2) { //Begin if-abfrage ob Variable "zw5" genau "2" ist
            position_3 = zw4; //Variable "position_3" wird auf  den wert von der Variable "zw4" gesetzt
          };  //Ende if-abfrage
          if (zw5 == 3) { //Begin if-abfrage ob Variable "zw5" genau "3" ist
            position_4 = zw4; //Variable "position_4" wird auf  den wert von der Variable "zw4" gesetzt
          };  //Ende if-abfrage
        };  //Ende if-abfrage

        zw4 = zw4 + 8; zw5++; //Variable "zw4" wird addiert mit "+8"  // Variable "zw5" wird hochgezählt
      } //Ende do-teil
      while (zw5 != 4); //While-teil solange Variable "zw5" nicht genau "4" ist

      if (test_rot == 4) {  //Begin if-abfrage ob Variable "test_rot" genau "4" ist
        sieger = 1; //Variable "sieger" wird auf "1" gesetzt
      } else {  //Ende if-abfrage //Begin else
        test_rot = 0; //Variable "test_rot" wird auf 0 gesetzt
      };  //Ende else
      if (test_gruen == 4) {  //Begin if-abfrage ob Variable "test_gruen" genau "4" ist
        sieger = 2; //Variable "sieger" wird auf "2" gesetzt
      } else {  //Ende if-abfrage //Begin else
        test_gruen = 0; //Variable "test_gruen" wird auf "0" gesetzt
      };  //Ende else
      zw4 = zw4 - 24; zw6++;  //Variable "zw4" wird Subthrahiert mit "-24" // Variable "zw6" wird hochgezählt
      if (sieger != 0) {  //Begin if-abfrage ob Variable "sieger" nicht genau "0" ist
        zw6 = 4;  //Variable "zw6" wird auf "4" gesetzt
      };  //Ende if-abfrage
    } //Ende do-teil
    while ( zw6 != 4);  //While-teil solange Variable "zw6" nicht genau "4" ist

    zw4 = zw4 - 31; zw7++;  //Variable "zw4" wird Subtrahiert mit "-31" //Variable "zw7" wird hochgezählt
    if (sieger != 0) {  //Begin if-abfrage ob Variable "sieger" nicht genau "0" ist
      zw7 = 8;  //Variable "zw7" wird auf "8" gesetzt
    };  //Ende if-abfrage
  } //Ende do-teil
  while (zw7 != 8); //While-teil solange Variable "zw7" nicht genau "8" ist

  // ------------- Test waagerecht --------------
  // ----------3 verschachtelte Zyklen ----------
  zw4 = 8; //Variable "zw4" wird auf "8" gesetzt // Startfeld beim Testen
  zw7 = 0; //Variable "zw7" wird auf "0" gesetzt
  do {  //Begin do-while-Schleife
    zw6 = 0;  //Variable "zw6" wird auf "0" gesetzt

    do {  //Begin do-while-Schleife
      zw5 = 0;  //Variable "zw5" wird auf "0" gesetzt
      test_rot = 0; test_gruen = 0; //Variablen "test_rot" & "test_gruen" werden auf "0" gesetzt

      // Testen 4 Zellen waagerecht
      do {  //Begin do-while-Schleife
        if ( spielfeld [zw4] == 1) {  //Begin if-abfrage ob im Array "spielfeld" an position "zw4" genau "1" ist
          test_rot ++;  //Variable "test_rot" wird hochgezählt
        };  //Ende if-abfrage
        if ( spielfeld [zw4] == 2) {  //Begin if-abfrage ob im Array "spielfeld" an position "zw4" genau "2" ist
          test_gruen ++;  //Variable "test_gruen" wird hochgezählt
        };  //Ende if-abfrage

        // Merken der Position beim Sieg
        if (sieger == 0) {  //Begin if-abfrage ob Variable "sieger" genau "0" ist
          if (zw5 == 0) {  //Begin if-abfrage ob Variable "zw5" genau "0" ist
            position_1 = zw4; //Variable "position_1" wird auf den wert von Variable "zw4" gesetzt
          };  //Ende if-abfrage
          if (zw5 == 1) {  //Begin if-abfrage ob Variable "zw5" genau "1" ist
            position_2 = zw4; //Variable "position_2" wird auf den wert von Variable "zw4" gesetzt
          };  //Ende if-abfrage
          if (zw5 == 2) {  //Begin if-abfrage ob Variable "zw5" genau "2" ist
            position_3 = zw4; //Variable "position_3" wird auf den wert von Variable "zw4" gesetzt
          };  //Ende if-abfrage
          if (zw5 == 3) {  //Begin if-abfrage ob Variable "zw5" genau "3" ist
            position_4 = zw4; //Variable "position_4" wird auf den wert von Variable "zw4" gesetzt
          };  //Ende if-abfrage
        };  //Ende if-abfrage

        zw4++; zw5++; //Variablen "zw4" & "zw5" werden hochgezählt
      } //Ende do-teil
      while (zw5 != 4); //While-teil solange Variable "zw5" nicht genau "4" ist

      if (test_rot == 4) {  //Begin if-abfrage ob Variable "test_rot" genau "4" ist
        sieger = 1; //Variable "sieger" wird auf "1" gesetzt
      } else {  //Ende if-abfrage & begin else-abfrage
        test_rot = 0; //Variable "test_rot" wird auf "0" gesetzt
      };  //Ende else-abfrage
      if (test_gruen == 4) {  //Begin if-abfrage ob Variable "test_gruen" genau "4" ist
        sieger = 2; //Variable "sieger" wird auf "2" gesetzt
      } else {  //Ende if-abfrage & begin else-abfrage
        test_gruen = 0; //Variable "test_gruen" wird auf "0" gestzt
      };  //Ende else-abfrage
      zw4 = zw4 + 4; zw6++; //Variable  "zw4" wird addiert mit "+4" //Variable "zw6" wird hochgezählt
      if (sieger != 0) {  //Begin if-abfrage ob Variable "sieger" nicht genau "0" ist
        zw6 = 7;  //Variable "zw6" wird auf "7" gesetzt
      };  //Ende if-abfrage
    } //Ende do-teil
    while ( zw6 != 5);  //While-teil solange Variable "zw6" nicht genau "7" ist

    zw4 = zw4 - 55; zw7++;  //Variable  "zw4" wird subthrahiert mit "-55" //Variable "zw7" wird hochgezählt
    if (sieger != 0) {  //Begin if-abfrage ob Variable "sieger" nicht genau "0" ist
      zw7 = 5;  //Variable "zw7" wird auf "5" gesetzt
    };  //Ende if-abfrage
  } //Ende do-teil
  while (zw7 != 5);  //While-teil solange Variable "zw7" nicht genau "5" ist

  // Festlegen Siegerfarben
  if (sieger == 1) {  //Begin if-abfrage ob Variable "sieger" genau "1" ist
    farbe_1 = rot;  //Variable "farbe_1" wird auf Variable "rot" gesetzt
    farbe_2 = rot;  //Variable "farbe_2" wird auf Variable "rot" gesetzt
    ende (); //Funktion "ende()" wird aufgerufen // Ausgabe Siegerfarbe Rot
  };  //Ende if-abfrage
  if (sieger == 2) {  //Begin if-abfrage ob Variable "sieger" genau "2" ist
    farbe_1 = gruen;  //Variable "farbe_1" wird auf Variable "gruen" gesetzt
    farbe_2 = gruen;  //Variable "farbe_2" wird auf Variable "gruen" gesetzt
    ende (); //Funktion "ende()" wird aufgerufen // Ausgabe Siegerfarbe Gruen
  };  //Ende if-abfrage
  if (zw8 == 40 ) {  //Begin if-abfrage ob Variable "zw8" genau "56" ist
    farbe_1 = gruen;  //Variable "farbe_1" wird auf Variable "gruen" gesetzt
    farbe_2 = rot;  //Variable "farbe_2" wird auf Variable "rot" gesetzt
    ende (); //Funktion "ende()" wird aufgerufen // Ausgabe Unentschieden
  };  //Ende if-abfrage

  position_1 = 0; position_2 = 0; position_3 = 0; position_4 = 0; //Variablen "postition_1", "postition_2", "postition_3" & "postition_4" werden auf "0" gesetzt
  test_rot = 0; test_gruen = 0; //Variablen "test_rot" & "test_gruen" werden auf "0" gesetzt
} //Ende Funktion "test_spielende()"

// ---------- Ausgabe Siegerfarbe ----------

void ende () {  //Begin der Funktion "ende()"
  zw11 = 0; //Variable "zw11" wird auf "0" gesetzt

  if (zw8 != 40 ) { //Begin if-abfrage ob Variable "zw8" nicht genau "56" ist
    do {  //Begin do-while-Schleife
      strip.setPixelColor ( position_1, 0, 0, 0); //Ansteurung von der Neopixel-LED an der position von dem wert der Variable "position_1" mit dem RGB wert "0,0,0"
      strip.setPixelColor ( position_2, 0, 0, 0); //Ansteurung von der Neopixel-LED an der position von dem wert der Variable "position_2" mit dem RGB wert "0,0,0"
      strip.setPixelColor ( position_3, 0, 0, 0); //Ansteurung von der Neopixel-LED an der position von dem wert der Variable "position_3" mit dem RGB wert "0,0,0"
      strip.setPixelColor ( position_4, 0, 0, 0); //Ansteurung von der Neopixel-LED an der position von dem wert der Variable "position_4" mit dem RGB wert "0,0,0"
      strip.show();  //Neopixel initialissierung anschalten der LED´s
      delay(200); //Pause von "200ms"
      strip.setPixelColor ( position_1, farbe_1); //Ansteurung von der Neopixel-LED an der position von dem wert der Variable "position_1" mit dem RGB wert von der Variable "farbe_1"
      strip.setPixelColor ( position_2, farbe_1); //Ansteurung von der Neopixel-LED an der position von dem wert der Variable "position_2" mit dem RGB wert von der Variable "farbe_1"
      strip.setPixelColor ( position_3, farbe_1); //Ansteurung von der Neopixel-LED an der position von dem wert der Variable "position_3" mit dem RGB wert von der Variable "farbe_1"
      strip.setPixelColor ( position_4, farbe_1); //Ansteurung von der Neopixel-LED an der position von dem wert der Variable "position_4" mit dem RGB wert von der Variable "farbe_1"
      strip.show();  //Neopixel initialissierung anschalten der LED´s
      delay(200); //Pause von "200ms"
      zw11++; //Variable "zw11" wird hochgezählt
    } //Ende do-teil
    while ( zw11 != 5); //While-teil solange Variable "zw11" nicht genau "5" ist
  } //Ende if-abfrage

  zw9 = 0;  //Variable "zw9" wird auf "0" gesetzt
  do {  //Begin do-while-Schleife
    strip.setPixelColor ( zw9, farbe_1);  //Ansteurung von der Neopixel-LED an der position von dem wert der Variable "zw9" mit dem RGB wert von der Variable "farbe_1"
    zw9++;  //Variable "zw9" wird hochgezählt
    strip.setPixelColor ( zw9, farbe_2);  //Ansteurung von der Neopixel-LED an der position von dem wert der Variable "zw9" mit dem RGB wert von der Variable "farbe_2"
    zw9++;  //Variable "zw9" wird hochgezählt
  } //Ende do-teil
  while (zw9 != 48);  //While-teil solange Variable "zw9" nicht genau "64" ist
  strip.show(); //Neopixel initialissierung anschalten der LED´s

  delay(2000);  //Pause von "2000ms"

  // ---------- Vorbereitung neuer Start -----------

  zw10 = 0; //Variable "zw10" wird auf "0" gesetzt
  do {  //Begin do-while-Schleife
    strip.setPixelColor ( zw10, 0, 0, 0); //Ansteurung von der Neopixel-LED an der position von dem wert der Variable "zw10" mit dem RGB wert "0,0,0"
    spielfeld [zw10] = 0; //Im Array "spielfeld" ander postion vom wert der Variable "zw10" wird eine "0" gesetzt
    zw10++; //Variable "zw10" wird hochgezählt
  } //Ende do-teil
  while ( zw10 != 48);  //While-teil solange Variable "zw10" nicht genau "64" ist
  strip.show(); //Neopixel initialissierung anschalten der LED´s

  spielfeld [0] = 1;  //Im Array "spielfeld" ander postion "0" wird eine "1" gesetzt
  ausgabe_spielfeld (); //Funktion "ausgabe_spielfeld()" wird aufgerufen
  zw1 = 0; zw2 = 0; zw3 = 0; zw4 = 0; zw5 = 0; zw6 = 0; zw7 = 0; zw8 = 0; zw9 = 0; zw10 = 0;  //Variablen "zw1-10" werden auf "0" gesetzt
  position_1 = 0; position_2 = 0; position_3 = 0; position_4 = 0; //Variablen "position_1-4" werden auf "0" gesetzt
  position_0 = 0; //Variable "position_0" wird auf "0" aufgesetzt

  // Wechsel Start-Spielfarbe
  farbe_1 = 0; farbe_2 = 0; sieger = 0; //Variable "farbe_1", "farbe_2" & "sieger" werden auf "0" gesetzt

  if (status_start == 1) {  //Begin if-abfrage ob die Variable "status_start" genau "1" ist
    farbe = gruen; //Variable "farbe" wird auf den wert der Variable "gruen" gesetzt
    status_spiel = 2; status_start = 2; //Variablen "status_spiel" & "status_start" werden auf "2" gesetzt
    spielfeld [0] = 2;  //Im Array "spielfeld" ander position "0" wird eine "2" gesetzt
  } else {  //Ende if-abfrage und begin else-abfrage
    farbe = rot; //Variable "farbe" wird auf den wert der Variable "rot" gesetzt
    spielfeld [0] = 1;  //Im Array "spielfeld" ander position "0" wird eine "1" gesetzt
    status_spiel = 1; status_start = 1; //Variablen "status_spiel" & "status_start" werden auf "1" gesetzt
  };  //Ende else-abfrage

  ausgabe_spielfeld (); //Funktion "ausgabe_spielfeld()" wird aufgerufen
} //Ende der Funktion "ende()"

// ---------- Ein Schritt nach Links ----------
void links_0 () { //Begin der Funktion "links_0()"
  if (position_0 != 0) {  //Begin if-abfrage ob Variable "position_0" nicht genau "0" ist
    spielfeld [position_0] = 0; //Im Array "spielfeld" an der position von dem wert der Variable "position_0" wird eine "0" gesetzt
    position_0--; //Variable "position_0" wird runtergezählt
    spielfeld [ position_0 ] = status_spiel;  //Im Array "spielfeld" an der position von dem wert der Variable "position_0" wird der wert der Variable "status_spiel" gesetzt
  };  //Ende if-abfrage
} //Ende Funktion "links_0"

// ---------- Ein Schritt nach Rechts ----------
void rechts_0 () {  //Begin der Funktion "rechts_0()"
  if (position_0 != 7) {  //Begin if-abfrage ob Variable "position_0" nicht genau "7" ist
    spielfeld [position_0] = 0; //Im Array "spielfeld" an der position von dem wert der Variable "position_0" wird eine "0" gesetzt
    position_0++; //Variable "position_0" wird hochgezählt
    spielfeld [ position_0 ] = status_spiel;  //Im Array "spielfeld" an der position von dem wert der Variable "position_0" wird der wert der Variable "status_spiel" gesetzt
  };  //Ende if-abfrage
} //Ende Funktion "rechts_0"

// ---------- Absenken des Spielsteines ----------
void runter_0 () {  //Begin der Funktion "runter_0()"
  zw3 = 0;  //Variable "zw3" wird auf "0" gesetzt
  do {  //Begin do-while-Schleife
    if (spielfeld [position_0 + 8] == 0 ) { //Begin if-abfrage ob im Array "spielfeld" an der position von dem wert der Variable "position_0" der addiert wirt mit "+8" genau eine "0" ist
      spielfeld [position_0] = 0; //Im Array "spielfeld" an der position von dem wert der Variable "position_0" wird eine 0 gesetzt
      position_0 = position_0 + 8;  //Variable "position_0" wird addiert mit "+8"
      spielfeld [position_0] = status_spiel;  //Im Array "spielfeld" an der position von dem wert der Variable "position_0" wird der wert von der Variable "status_spiel" gesetzt
      zw3++;  //Variable "zw3" wird hochgezählt
      ausgabe_spielfeld (); //Funktion "ausgabe_spielfeld()" wird aufgerufen
      delay(200); //Pause von "200ms"
    } else {  //Ende if-abfrage und begin else-abfrage
      zw3 = 5;  //Variable "zw3" wird auf "7" gesetzt
    }  //Ende else-abfrage
  } //Ende do-teil
  while (zw3 != 5) ;  //While-teil solange die Variable "zw3" nicht genau "7" ist
  richtung = 0; position_0 = 0; //Variablen "richtung" & "position_0" wird auf "0" gesetzt
  if (status_spiel == 1 ) { //Begin if-abfrage ob Variable "status_spiel" genau "1" ist
    status_spiel = 2; //Variable "status_spiel" wird auf "2" gesetzt
    spielfeld [position_0] = 2; //Im Array "spielfeld" an der position von dem wert der Variable "position_0" wird der wert "2" gesetzt
  } else {  //Ende if-abfrage und begin else-abfrage
    status_spiel = 1; //Variable "status_spiel" wird auf "1" gesetzt
    spielfeld [position_0] = 1; //Im Array "spielfeld" an der position von dem wert der Variable "position_0" wird der wert "1" gesetzt
  };  //Ende else-abfrage
  ausgabe_spielfeld (); //Funktion "ausgabe_spielfeld()" wird aufgerufen
} //Ende Funktion "runter_0"

// ---------- Ausgabe Spielfeld ----------
void ausgabe_spielfeld () { //Begin der Funktion "ausgabe_spielfeld()"
  zw1 = 0;  //Variable "zw1" wird "0" gesetzt

  do {  //Begin do-while-Schleife
    zw2 = spielfeld [zw1];  //Variable "zw2" wird auf den wert im Array "spielfeld" an der position vom wert der Variable "zw1" gesetzt
    if (zw2 == 0) { //Begin if-abfrage ob Variable "zw2" genau "0" ist
      strip.setPixelColor ( zw1, 0, 0, 0);  //Ansteurung von der Neopixel-LED an der position von dem wert der Variable "zw1" mit dem RGB wert "0,0,0"
    };  //Ende if-abfrage
    if (zw2 == 1) { //Begin if-abfrage ob Variable "zw2" genau "1" ist
      strip.setPixelColor ( zw1, rot);  //Ansteurung von der Neopixel-LED an der position von dem wert der Variable "zw1" mit dem RGB wert von der Variable "rot"
    };  //Ende if-abfrage
    if (zw2 == 2) { //Begin if-abfrage ob Variable "zw2" genau "2" ist
      strip.setPixelColor ( zw1, gruen);  //Ansteurung von der Neopixel-LED an der position von dem wert der Variable "zw1" mit dem RGB wert von der Variable "gruen"
    };  //Ende if-abfrage
    zw1++;  //Variable "zw1" wird hochgezählt
  } //Ende do-teil
  while (zw1 != 48);  //While-teil solange Variable "zw1" nicht genau "64" ist
  strip.show(); //Neopixel initialissierung anschalten der LED´s
} //Ende der Funktion "ausgabe_spielfeld()"