/* Arduino Spiel Autor: Zhao Xue Letzte Änderung: 12.07.2022 Zweck: Beleg 3 */ unsigned char gesamtpunktzahl; const int red = 13, blue = 12, green = 11; byte wahl; //Erstellung der Variante von den Modeauswahlen byte eingabe[10]; //Erstellung der Eingabe der Auswahlen bool prufmode=false; bool gameover=false; byte i; void setup() { gesamtpunktzahl = 0; pinMode(red, OUTPUT); pinMode(green, OUTPUT); pinMode(blue, OUTPUT); for(i=1;i<=10;i++){ pinMode(i, INPUT_PULLUP); } resetAllPins(); } void resetAllPins() { // alle Pins auf definierte Werte setzen (sonst wissen wir nicht, welchen Wert sie gerade haben.) digitalWrite(red, LOW); digitalWrite(green, LOW); digitalWrite(blue, LOW); // Alle nachfolgenden Pins werden auf HIGH gesetzt, sodass sie auf ein GND/Masse-Signal reagieren können. /* digitalWrite(1, HIGH); digitalWrite(2, HIGH); digitalWrite(3, HIGH); digitalWrite(4, HIGH); digitalWrite(5, HIGH); digitalWrite(6, HIGH); digitalWrite(7, HIGH); digitalWrite(8, HIGH); digitalWrite(9, HIGH); digitalWrite(10, HIGH);*/ } void blink(const int *pin) { digitalWrite(*pin, HIGH); delay(500); digitalWrite(*pin, LOW); delay(500); } void loop() //Schleife der 2 Level { wahl=menu(); if(wahl==2) //in einfache Mode Gehen { game();} else if (wahl==3) //in schwierige Mode Gehen {game();} resetAllPins(); } void allblink(byte Mals) //Unterprogramm fur Blinken der Lichten { for(i=1;i<=Mals;i++) { digitalWrite(red, HIGH);digitalWrite(green, HIGH);digitalWrite(blue, HIGH); delay(500); digitalWrite(red, LOW);digitalWrite(green, LOW);digitalWrite(blue, LOW); delay(500); } } byte menu() //Code des Menus { blink(&green); //Erscheinung der Leuchte blink(&green); blink(&red); blink(&red); blink(&red); if (digitalRead(2) == LOW) //Erscheinung des einfachen Modemenu { for(i=1;i<=2;i++) //2 Mals blink { allblink(2); } return 2; } else if (digitalRead(3) == LOW) //Erscheinung des schwierigen Modemenu { for(i=1;i<=3;i++) //3 Mals blink { allblink(3); } return 3; } else {return 0;} } void game() //unterprogramm vom Spiel { int j=0,k=0; for(;;){ //Spielschleife if(!prufmode) { digitalWrite(green, HIGH);//Warten auf Eingabe for(i=1;i<=10;i++) //Schleife der Eingabe {if (digitalRead(i) == LOW) { for(byte s=1;s<=i;s++){ //Die eingegebene Zahl gibt an, wie oft das grune Licht blinkt. blink(&green); } eingabe[j]=i; //Die eingegebene Zahl wird in Liste gespeichert. blink(&green); prufmode=true; //um in Prufmode einzugehen j++;k=0; digitalWrite(green, LOW); if(wahl==3){ //schwierige Mode byte a=analogRead(0)%10+1; //Randzahl:1-10 eingabe[j]=a; //Die Ranzahl wird in Liste gespeichert. j++;k=0; for(int i=1;i<=a;i++){ blink(&red);} //Wie viel ist die Randzahl, wie oft das grune Licht blinkt. prufmode=true; } } } } else //prufen der Eingabe {digitalWrite(green, LOW);digitalWrite(blue, HIGH); for(i=1;i<=10;i++) {if (digitalRead(i) == LOW) //Prufzahl eigeben { if(eingabe[k]==i) //Die eingegebene Zahl wird in Liste gespeichert. { digitalWrite(blue, LOW);delay(500);digitalWrite(blue, HIGH); k++; } else {gameover=true;} } } if(k==j) //Prufzahl ist richtig prufmode=false; //um die neue Zahl einzugeben } if(gameover) //Gameover { for(i=1;i<=j;i++){ allblink(j); } for(i=0;i>10;i++) {eingabe[i]=0;}gameover=false;prufmode=false; //reset break; } resetAllPins(); } }