123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167 |
- /*
- 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();
- }
-
- }
|