const int ledPins[4] = {}; const int buttonPins[4] = {}; int sequence[100]; int userInput[100]; int level = 0; bool gameOver = false; void setup() { //leds OUTPUT //botoões INPUTPULL_UP randomSeed(analogRead(A0)); Serial.begin(9600); nextLevel(); } void loop() { if (!gameOver) { showSequence(); getUserInput(); } } void nextLevel() { sequence[level] = random(0, 4); level++; delay(1000); } void showSequence() { for (int i = 0; i < level; i++) { int color = sequence[i]; digitalWrite(ledPins[color], HIGH); delay(500); digitalWrite(ledPins[color], LOW); delay(250); } } void getUserInput() { for (int i = 0; i < level; i++) { int input = waitForButtonPress(); userInput[i] = input; digitalWrite(ledPins[input], HIGH); delay(300); digitalWrite(ledPins[input], LOW); delay(100); if (userInput[i] != sequence[i]) { gameOver = true; Serial.println("Game Over!"); flashAll(3); level = 0; delay(1000); nextLevel(); // recomeça gameOver = false; return; } } delay(500); nextLevel(); } int waitForButtonPress() { while (true) { for (int i = 0; i < 4; i++) { if (digitalRead(buttonPins[i]) == LOW) { while (digitalRead(buttonPins[i]) == LOW); // espera soltar return i; } } } } void flashAll(int times) { for (int t = 0; t < times; t++) { for (int i = 0; i < 4; i++) { digitalWrite(ledPins[i], HIGH); } delay(300); for (int i = 0; i < 4; i++) { digitalWrite(ledPins[i], LOW); } delay(300); } }