Simon

Dependencies:   mbed

Revision:
2:f45bd4655817
Parent:
1:78297550b459
Child:
3:1610e2f8803b
diff -r 78297550b459 -r f45bd4655817 main.cpp
--- a/main.cpp	Mon May 27 11:41:23 2019 +0000
+++ b/main.cpp	Tue May 28 11:41:17 2019 +0000
@@ -35,22 +35,22 @@
 DigitalOut Verde(LED2);
 DigitalOut Azul(LED3);
 
-void invierte();
+void invierte(); 
 void simon();
 char Pulsador ();
 void leds(int num); // led(0b000) = apagados,  led(0b100) = rojo, led(0b010) = Verde, led(0b001) = Azul, led(0b111) = Blanco,
+
 char sec[50] = {0};
-char r = 1;
-char t = 0;
-char pos = 0;
-int times    = 0, espera = 0;;
+char nivelSec = 1;
+char posSec = 0;
+char posJuego = 0;
+int times = 0, espera = 0;;
 bool flagPulsador = 0;
 char pulsador = 0;
 char estado = ESTADO_COMENZAR;
 
-bool timer1 = 0, timer2 = 0, timer3 = 0;
 bool pulsador1 = 1, pulsador2 = 1, pulsador3 = 1;
-bool st1= 0, st2 = 0, st3 = 0, l = 1, apagado = 0;
+bool st1= 0, st2 = 0, st3 = 0, loop = 1, apagado = 0;
 
 
 DebouncedIn PV(PTB1);
@@ -73,11 +73,13 @@
 //Prendemos los LEDS
     leds(0b111);
     printf("Toque cualquier pulsador para comenzar: \r\n");
-//Ejecutar onCharReceived por cada entrada por puerto
 
     while(true) {
+        //Cambio el estado de los pulsadores
         Pulsador();
+        //Ejecuto la funcion principal
         simon();
+        //Aseguro el reset de la habilitacion del pulsador
         flagPulsador = 0;
     }
 }
@@ -86,6 +88,7 @@
     static int i;
     switch(estado) {
         case ESTADO_COMENZAR:
+        //Espero que pulsen un pulsador para empezar
             times = 0;
             if(pulsador != 0 && flagPulsador == 1) {
                 leds(0b000);
@@ -96,60 +99,67 @@
             break;
 
         case ESTADO_REINICIO:
-            //Reinicio la secuencia
+            //Seteo la semilla
             srand (semilla*4920*1912);
+            //Genero la secuencia
             for(i = 0; i <= NIVELES ; i ++) {
                 sec[i] = rand() % 3 + 1;
             }
-            r = 1;
-            t = 0;
-            pos = 0;
+            nivelSec = 1;
+            posJuego = 0;
+            posJuego = 0;
             estado = ESTADO_MUESTREO;
             times = 0;
-            l = 0;
+            loop = 0;
             break;
 
         case ESTADO_MUESTREO:
-            //Muestro la secuencia
-            if(l) {
+            //Muestro la secuencia generada
+            if(loop) {
+                //Cada vez que termino de mostrar un LED
                 if (apagado == 0) {
-                    if(t >= r) {
+                    //Evaluo si mostre la cantidad de LEDs segun el nivel
+                    if(posSec >= nivelSec) {
                         estado = ESTADO_JUEGO;
                         printf("\nA jugar Bro :) \r");
                         printf("\r\n\n");
                         espera = 0;
                         break;
                     }
-                    switch(sec[t]) {
+                    switch(sec[posSec]) {
                         case 1:
+                        //Muestro LED rojo
                             leds(0b100);
                             if(times > 5) {
                                 times = 0;
                                 printf("ROJO\r\n");
                                 apagado = 1;
-                                t++;
+                                posSec++;
                             }
                             break;
                         case 2:
+                        //Muestro LED verde
                             leds(0b010);
                             if(times > 5) {
                                 apagado = 1;
                                 times = 0;
                                 printf("VERDE\r\n");
-                                t++;
+                                posSec++;
                             }
                             break;
                         case 3:
+                        //Muestro LED azul
                             leds(0b001);
                             if(times > 5) {
                                 apagado = 1;
                                 times = 0;
                                 printf("AZUL\r\n");
-                                t++;
+                                posSec++;
                             }
                             break;
                     }
                 } else {
+                    //Dejo un espacio apagado entre los colores de las secuencias
                     leds(0b000);
                     if (times > 5) {
                         times = 0;
@@ -157,24 +167,29 @@
                     }
                 }
             } else {
+                //Espero 5 times el ultimo LED encendido y lo apago
                 if (times > 5)
                     leds(0b000);
+                //Espero 5 times mas para separar el final de muestreo con el inicio del Juego
                 if (times > 10) {
-                    l = 1;
+                    loop = 1;
                     times = 0;
                 }
             }
             break;
         case ESTADO_JUEGO:
+        //Detecto si el jugador tarda mucho tiempo en apretar un boton
             if (espera > 50) {
                 printf("Tardaste demaciado tiempo en elegir\r\n");
                 estado = ESTADO_PERDER;
                 break;
             }
+            //Detecto un cambio en los pulsadores
             if(flagPulsador) {
                 espera = 0;
                 flagPulsador = 0;
                 times = 0;
+                //Detecto que pulsador precionaron y enciendo el LED
                 switch(pulsador) {
                     case 1:
                         printf("ROJO \r\n");
@@ -189,32 +204,39 @@
                         leds(0b001);
                         break;
                 }
-                if(pulsador == sec[pos]) {
-                    pos++;
-                    if(pos == r) {
-                        r++;
+                //Comparo si el pulsador apretado es el correcto segun la secuencia
+                if(pulsador == sec[posJuego]) {
+                    posJuego++;
+                    //Si alcancé el nivel en el que estoy paso de nivel
+                    if(posJuego == nivelSec) {
+                        nivelSec++;
                         printf("\n\t--------------------------------\r");
-                        if (r == NIVELES + 1) {
+                        //Si alcancé el máximo nivel paso al estado GANAR
+                        if (nivelSec == NIVELES + 1) {
                             estado = ESTADO_GANAR;
                         } else {
+                            //Si no llegué al máximo nivel paso de nivel
                             printf("\nPasaste al nivel %d!\r\n\n", r);
-                            t = 0;
-                            pos = 0;
+                            posSec = 0;
+                            posJuego = 0;
                             estado = ESTADO_MUESTREO;
-                            l = 0;
+                            loop = 0;
                             times = 0;
                         }
                     }
                 } else {
+                    //Si el pulsador no corresponde con la secuencia paso al estado PERDER
                     estado = ESTADO_PERDER;
                 }
             }
+            //Espero 5 times el LED encendido
             if (times > 5) {
                 leds(0b000);
 
             }
             break;
         case ESTADO_PERDER:
+        //Prendo el LED blanco para mostrar que termino el juego y vuelvo al estado COMENZAR
             printf("\nPerdiste Bro :(\r\n");
             printf("Apreta cualquier boton para reiniciar!\r\n\n");
             leds(0b111);
@@ -222,6 +244,7 @@
             break;
 
         case ESTADO_GANAR:
+        //Mustro el LED blanco para mostrar que termino el juego y aviso que completo la secuencia
             printf("\nGANASTE!!! :)\r\n\n");
             printf("Apreta cualquier boton para reiniciar!\r\n\n");
             leds(0b111);
@@ -231,6 +254,7 @@
 }
 void leds(int num)
 {
+    //Funcion que codifica el encendido y apagado de los LEDs
     switch(num) {
         case 0:
             Rojo = 1;
@@ -262,6 +286,7 @@
 
 char Pulsador()
 {
+    //Funcion que aciva un flag con el cambio del pulsador y guarda el pulsado en una variable
     pulsador = 0;
 
     if (PV.rising()) {
@@ -287,6 +312,7 @@
 
 void invierte()
 {
+    //Funcion que detecta las interrupciones del timer
     times++;
     semilla ++;
     espera++;