// Definición de pines para los LEDs y botones
const int ledRojo = 2;
const int botonRojo = 3;
const int ledAmarillo = 4;
const int botonAmarillo = 5;
const int ledVerde = 6;
const int botonVerde = 7;
const int ledAzul = 8;
const int botonAzul = 9;
const int zumbador = 10;
int secuencia[100]; // Almacena la secuencia aleatoria
int entradaJugador[100]; // Almacena la secuencia ingresada por el jugador
int nivel = 0; // Nivel actual del juego
bool juegoTerminado = false; // Bandera para verificar si el juego ha terminado
void setup() {
pinMode(ledRojo, OUTPUT);
pinMode(ledAmarillo, OUTPUT);
pinMode(ledVerde, OUTPUT);
pinMode(ledAzul, OUTPUT);
pinMode(botonRojo, INPUT_PULLUP);
pinMode(botonAmarillo, INPUT_PULLUP);
pinMode(botonVerde, INPUT_PULLUP);
pinMode(botonAzul, INPUT_PULLUP);
pinMode(zumbador, OUTPUT);
digitalWrite(zumbador, HIGH);
Serial.begin(9600);
Serial.println("Juego iniciado");
iniciarJuego();
}
void loop() {
if (!juegoTerminado) {
Serial.print("Nivel actual: ");
Serial.println(nivel);
reproducirSecuencia();
if (!obtenerEntradaJugador()) {
terminarJuego();
} else {
delay(500);
}
} else {
delay(1500);
iniciarJuego();
}
}
void iniciarJuego() {
nivel = 1;
juegoTerminado = false;
Serial.println("Nuevo juego iniciado");
for (int i = 0; i < 3; i++) {
digitalWrite(ledRojo, HIGH);
digitalWrite(ledAmarillo, HIGH);
digitalWrite(ledVerde, HIGH);
digitalWrite(ledAzul, HIGH);
digitalWrite(zumbador, LOW);
delay(300);
digitalWrite(ledRojo, LOW);
digitalWrite(ledAmarillo, LOW);
digitalWrite(ledVerde, LOW);
digitalWrite(ledAzul, LOW);
digitalWrite(zumbador, HIGH);
delay(300);
}
Serial.println("Iniciando juego...");
delay(2000);
randomSeed(analogRead(A0));
delay(500);
}
void reproducirSecuencia() {
secuencia[nivel - 1] = random(1, 5);
for (int i = 0; i < nivel; i++) {
iluminarLED(secuencia[i]);
delay(300);
}
}
bool obtenerEntradaJugador() {
for (int i = 0; i < nivel; i++) {
bool entradaRecibida = false;
while (!entradaRecibida) {
if (digitalRead(botonRojo) == LOW) {
entradaJugador[i] = 1;
iluminarLED(1);
entradaRecibida = true;
} else if (digitalRead(botonAmarillo) == LOW) {
entradaJugador[i] = 2;
iluminarLED(2);
entradaRecibida = true;
} else if (digitalRead(botonVerde) == LOW) {
delay(50);
if (digitalRead(botonVerde) == LOW) {
entradaJugador[i] = 3;
iluminarLED(3);
entradaRecibida = true;
}
} else if (digitalRead(botonAzul) == LOW) {
delay(50);
if (digitalRead(botonAzul) == LOW) {
entradaJugador[i] = 4;
iluminarLED(4);
entradaRecibida = true;
}
}
}
if (entradaJugador[i] != secuencia[i]) {
return false;
}
delay(200);
}
nivel++;
return true;
}
void terminarJuego() {
juegoTerminado = true;
Serial.println("Juego terminado");
for (int i = 0; i < 5; i++) {
digitalWrite(ledRojo, HIGH);
digitalWrite(ledAmarillo, HIGH);
digitalWrite(ledVerde, HIGH);
digitalWrite(ledAzul, HIGH);
digitalWrite(zumbador, LOW);
delay(300);
digitalWrite(ledRojo, LOW);
digitalWrite(ledAmarillo, LOW);
digitalWrite(ledVerde, LOW);
digitalWrite(ledAzul, LOW);
digitalWrite(zumbador, HIGH);
delay(200);
}
}
void iluminarLED(int color) {
switch (color) {
case 1: digitalWrite(ledRojo, HIGH); digitalWrite(zumbador, LOW); delay(300); break;
case 2: digitalWrite(ledAmarillo, HIGH); digitalWrite(zumbador, LOW); delay(300); break;
case 3: digitalWrite(ledVerde, HIGH); digitalWrite(zumbador, LOW); delay(300); break;
case 4: digitalWrite(ledAzul, HIGH); digitalWrite(zumbador, LOW); delay(300); break;
}
digitalWrite(ledRojo, LOW);
digitalWrite(ledAmarillo, LOW);
digitalWrite(ledVerde, LOW);
digitalWrite(ledAzul, LOW);
digitalWrite(zumbador, HIGH);
}