BELEG3.ino 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169
  1. /*
  2. Arduino Spiel
  3. Autor: Zhao Xue
  4. Letzte Änderung: 12.07.2022
  5. Zweck: Beleg 3
  6. */
  7. unsigned char gesamtpunktzahl;
  8. const int red = 13, blue = 12, green = 11;
  9. byte wahl; //Erstellung der Variante von den Modeauswahlen
  10. byte eingabe[10]; //Erstellung der Eingabe der Auswahlen
  11. int rand(void); //Erstellung der Rand
  12. bool prufmode=false;
  13. bool gameover=false;
  14. void setup()
  15. {
  16. gesamtpunktzahl = 0;
  17. pinMode(red, OUTPUT);
  18. pinMode(green, OUTPUT);
  19. pinMode(blue, OUTPUT);
  20. pinMode(10, INPUT_PULLUP);
  21. pinMode(9, INPUT_PULLUP);
  22. pinMode(8, INPUT_PULLUP);
  23. pinMode(7, INPUT_PULLUP);
  24. pinMode(6, INPUT_PULLUP);
  25. pinMode(5, INPUT_PULLUP);
  26. pinMode(4, INPUT_PULLUP);
  27. pinMode(3, INPUT_PULLUP);
  28. pinMode(2, INPUT_PULLUP);
  29. pinMode(1, INPUT_PULLUP);
  30. resetAllPins();
  31. }
  32. void resetAllPins()
  33. {
  34. // alle Pins auf definierte Werte setzen (sonst wissen wir nicht, welchen Wert sie gerade haben.)
  35. digitalWrite(red, LOW);
  36. digitalWrite(green, LOW);
  37. digitalWrite(blue, LOW);
  38. // Alle nachfolgenden Pins werden auf HIGH gesetzt, sodass sie auf ein GND/Masse-Signal reagieren können.
  39. digitalWrite(1, HIGH);
  40. digitalWrite(2, HIGH);
  41. digitalWrite(3, HIGH);
  42. digitalWrite(4, HIGH);
  43. digitalWrite(5, HIGH);
  44. digitalWrite(6, HIGH);
  45. digitalWrite(7, HIGH);
  46. digitalWrite(8, HIGH);
  47. digitalWrite(9, HIGH);
  48. digitalWrite(10, HIGH);
  49. }
  50. void blink(const int *pin)
  51. {
  52. digitalWrite(*pin, HIGH);
  53. delay(500);
  54. digitalWrite(*pin, LOW);
  55. delay(500);
  56. }
  57. void loop() //Schleife der 2 Level
  58. {
  59. wahl=menu();
  60. if(wahl==2) //in einfache Mode Gehen
  61. {
  62. game();}
  63. else if (wahl==3) //in schwierige Mode Gehen
  64. {game();}
  65. resetAllPins();
  66. }
  67. byte menu() //Code des Menus
  68. {
  69. blink(&green); //Erscheinung der Leuchte
  70. blink(&green);
  71. blink(&red);
  72. blink(&red);
  73. blink(&red);
  74. if (digitalRead(2) == LOW) //Erscheinung des einfachen Modemenu
  75. {
  76. for(int i=1;i<=2;i++) //2 Mals blink
  77. {digitalWrite(red, HIGH);digitalWrite(green, HIGH);digitalWrite(blue, HIGH);
  78. delay(500);
  79. digitalWrite(red, LOW);digitalWrite(green, LOW);digitalWrite(blue, LOW);
  80. delay(500);
  81. }
  82. return 2;
  83. }
  84. else if (digitalRead(3) == LOW) //Erscheinung des schwierigen Modemenu
  85. {
  86. for(int i=1;i<=3;i++) //3 Mals blink
  87. {digitalWrite(red, HIGH);digitalWrite(green, HIGH);digitalWrite(blue, HIGH);
  88. delay(500);
  89. digitalWrite(red, LOW);digitalWrite(green, LOW);digitalWrite(blue, LOW);
  90. delay(500);}
  91. return 3;
  92. }
  93. else
  94. {return 0;}
  95. }
  96. void game() //unterprogramm vom Spiel
  97. { int j=0,k=0;
  98. for(;;){ //Spielschleife
  99. if(!prufmode)
  100. {
  101. digitalWrite(green, HIGH);//Warten auf Eingabe
  102. for(int i=1;i<=10;i++) //Schleife der Eingabe
  103. {if (digitalRead(i) == LOW)
  104. {
  105. for(int s=1;s<=i;s++){ //Die eingegebene Zahl gibt an, wie oft das grune Licht blinkt.
  106. blink(&green);
  107. }
  108. eingabe[j]=i; //Die eingegebene Zahl wird in Liste gespeichert.
  109. blink(&green);
  110. prufmode=true; //um in Prufmode einzugehen
  111. j++;k=0;
  112. digitalWrite(green, LOW);
  113. if(wahl==3){ //schwierige Mode
  114. int a=rand()%10+1; //Randzahl:1-10
  115. eingabe[j]=a; //Die Ranzahl wird in Liste gespeichert.
  116. j++;k=0;
  117. for(int i=1;i<=a;i++){
  118. blink(&red);} //Wie viel ist die Randzahl, wie oft das grune Licht blinkt.
  119. prufmode=true;
  120. }
  121. }
  122. }
  123. }
  124. else //prufen der Eingabe
  125. {digitalWrite(green, LOW);digitalWrite(blue, HIGH);
  126. for(int i=1;i<=10;i++)
  127. {if (digitalRead(i) == LOW) //Prufzahl eigeben
  128. {
  129. if(eingabe[k]==i) //Die eingegebene Zahl wird in Liste gespeichert.
  130. {
  131. digitalWrite(blue, LOW);delay(500);digitalWrite(blue, HIGH);
  132. k++;
  133. }
  134. else
  135. {gameover=true;}
  136. }
  137. }
  138. if(k==j) //Prufzahl ist richtig
  139. prufmode=false; //um die neue Zahl einzugeben
  140. }
  141. if(gameover) //Gameover
  142. { for(int i=1;i<=j;i++){
  143. digitalWrite(red, HIGH);digitalWrite(green, HIGH);digitalWrite(blue, HIGH);
  144. delay(500);
  145. digitalWrite(red, LOW);digitalWrite(green, LOW);digitalWrite(blue, LOW);
  146. delay(500);
  147. }
  148. for(int i=0;i>10;i++)
  149. {eingabe[i]=0;}gameover=false;prufmode=false; //reset
  150. break;
  151. }
  152. resetAllPins();
  153. }
  154. }