Gonzalo Martinez
/
TPBombaAguaDisplays
4 Cables con pulsadores y pull-up con 2 Displays en paralelo
main.cpp@2:e7e06ee2d6b0, 2019-06-23 (annotated)
- Committer:
- gonzaloMS
- Date:
- Sun Jun 23 03:45:31 2019 +0000
- Revision:
- 2:e7e06ee2d6b0
- Parent:
- 1:2f8c5940c425
com
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
gonzaloMS | 1:2f8c5940c425 | 1 | |
gonzaloMS | 1:2f8c5940c425 | 2 | //Tenemos 2 displays en paralelo, y manejamos cada uno por separado a través de sus habilitaciones (con transistores al corte y saturación) |
gonzaloMS | 1:2f8c5940c425 | 3 | |
gonzaloMS | 0:d644ac0f96b0 | 4 | #include "mbed.h" |
gonzaloMS | 0:d644ac0f96b0 | 5 | |
gonzaloMS | 1:2f8c5940c425 | 6 | //Creo los Estados para las Máquinas de Estados |
gonzaloMS | 1:2f8c5940c425 | 7 | enum{INICIO,GENERA1,GENERA2,GENERA3,FIN,BEGINNING,CHECK1,CHECK2,CHECK3,ENDGAME,WINGAME}; |
gonzaloMS | 2:e7e06ee2d6b0 | 8 | // |----------------------------------|----------------------------------------------| |
gonzaloMS | 2:e7e06ee2d6b0 | 9 | // GENERACIÓN CHEQUEO |
gonzaloMS | 1:2f8c5940c425 | 10 | |
gonzaloMS | 0:d644ac0f96b0 | 11 | DigitalIn E1r(PTC12); |
gonzaloMS | 1:2f8c5940c425 | 12 | DigitalIn E2r(PTC13); // 0 1 2 3 (Entradas reales/físicas) |
gonzaloMS | 1:2f8c5940c425 | 13 | DigitalIn E3r(PTC3); // E1r E2r E3r E4r |
gonzaloMS | 0:d644ac0f96b0 | 14 | DigitalIn E4r(PTC4); |
gonzaloMS | 1:2f8c5940c425 | 15 | DigitalIn pulsadorReset(PTE29); //Pulsador externo para hacer reset, normalmente 1 |
gonzaloMS | 1:2f8c5940c425 | 16 | |
gonzaloMS | 1:2f8c5940c425 | 17 | DigitalOut ledWin(LED2); //Configuro Led RGB en verde para cuando ganás el juego |
gonzaloMS | 1:2f8c5940c425 | 18 | DigitalOut ledLost(LED1); //Configuro Led RGB en rojo para cuando perdés el juego |
gonzaloMS | 1:2f8c5940c425 | 19 | |
gonzaloMS | 1:2f8c5940c425 | 20 | BusOut Displays(D2,D3,D4,D5,A3,A2,A1,A0,D8); //Salidas en este orden: HAB.2 (UNIDADES) - HAB.1 (DECENAS) - G - F - E - D - C - B - A respectivamente // |
gonzaloMS | 1:2f8c5940c425 | 21 | |
gonzaloMS | 0:d644ac0f96b0 | 22 | int E1=0; |
gonzaloMS | 1:2f8c5940c425 | 23 | int E2=0; //Variables donde se van a guardar los estados de las entradas reales (Ej.: E1r en E1) |
gonzaloMS | 0:d644ac0f96b0 | 24 | int E3=0; |
gonzaloMS | 0:d644ac0f96b0 | 25 | int E4=0; |
gonzaloMS | 1:2f8c5940c425 | 26 | |
gonzaloMS | 1:2f8c5940c425 | 27 | //Cada número del 0 al 9 en binario dentro de un vector, para después asignarlo al BusOut (El menos significativo acá es el más significativo del BusOut) |
gonzaloMS | 1:2f8c5940c425 | 28 | int numerosD[]={0b111111010,0b011000010,0b110110110,0b111100110,0b011001110,0b101101110,0b101111110,0b111000010,0b111111110,0b111001110}; //0-9 Decenas |
gonzaloMS | 1:2f8c5940c425 | 29 | int numerosU[]={0b111111001,0b011000001,0b110110101,0b111100101,0b011001101,0b101101101,0b101111101,0b111000001,0b111111101,0b111001101}; //0-9 Unidades |
gonzaloMS | 0:d644ac0f96b0 | 30 | |
gonzaloMS | 1:2f8c5940c425 | 31 | //Inicializo Tickers que ejecutan una función cada cierto tiempo en segundos |
gonzaloMS | 1:2f8c5940c425 | 32 | Ticker Tempo; |
gonzaloMS | 0:d644ac0f96b0 | 33 | Ticker Display; |
gonzaloMS | 0:d644ac0f96b0 | 34 | Ticker parpadeoTicker; |
gonzaloMS | 0:d644ac0f96b0 | 35 | |
gonzaloMS | 1:2f8c5940c425 | 36 | //Funciones de cada Ticker respectivamente |
gonzaloMS | 1:2f8c5940c425 | 37 | void descuentaTiempo(); //Cada 1 seg le resta 1 a una variable que lleva el tiempo. Al llegar a 0, indica a través de una variable que el jugador perdió |
gonzaloMS | 1:2f8c5940c425 | 38 | void visualizacionDisplays(); //Genera Unidades y Decenas en base al tiempo. Maneja el BusOut que va a las patas de los displays para mostrar el tiempo |
gonzaloMS | 1:2f8c5940c425 | 39 | void parpadeoFuncion(); //Hace que parpadee el led rojo cuando perdés y que parpadeen los segmentos de los displays cuando termine el juego |
gonzaloMS | 1:2f8c5940c425 | 40 | |
gonzaloMS | 1:2f8c5940c425 | 41 | //Funciones de las Máquinas de estados |
gonzaloMS | 1:2f8c5940c425 | 42 | void generacion(); //Genera secuencia |
gonzaloMS | 1:2f8c5940c425 | 43 | void chequeo(); //Chequea si el estado de las entradas concuerda con la secuencia generada |
gonzaloMS | 0:d644ac0f96b0 | 44 | |
gonzaloMS | 1:2f8c5940c425 | 45 | //Funciones extra |
gonzaloMS | 1:2f8c5940c425 | 46 | void winReaccion(); //Prende el led verde si ganás (desconectas todos los cables en el orden correcto) |
gonzaloMS | 1:2f8c5940c425 | 47 | void reset(); //Si presionás el botón reset reinicia las variables necesarias, hace que las máquinas de estados vuelvan a empezar por su estado default y apaga los leds |
gonzaloMS | 1:2f8c5940c425 | 48 | |
gonzaloMS | 1:2f8c5940c425 | 49 | //Varible que se encarga de decidir cuándo mostrar las decenas y cuándo las unidades |
gonzaloMS | 1:2f8c5940c425 | 50 | int switcheo=0; |
gonzaloMS | 1:2f8c5940c425 | 51 | |
gonzaloMS | 1:2f8c5940c425 | 52 | //Variables relacionadas con el tiempo que se muestra en los displays |
gonzaloMS | 1:2f8c5940c425 | 53 | int tiempo=60; //Guarda el tiempo en segundos |
gonzaloMS | 1:2f8c5940c425 | 54 | int Decenas; //Guarda solamente la unidad del tiempo |
gonzaloMS | 1:2f8c5940c425 | 55 | int Unidades; //Guarda solamente la decena del tiempo |
gonzaloMS | 0:d644ac0f96b0 | 56 | |
gonzaloMS | 1:2f8c5940c425 | 57 | //Variables en las que se guarda el estado de las máquinas de estados |
gonzaloMS | 1:2f8c5940c425 | 58 | int secuencia; //Para la máquina de estados de generación de secuencia |
gonzaloMS | 1:2f8c5940c425 | 59 | int check; //Para la máquina de estados de chequeo de las entradas |
gonzaloMS | 1:2f8c5940c425 | 60 | |
gonzaloMS | 1:2f8c5940c425 | 61 | //Variables que guardan cuántas de las entradas concuerdan con la secuencia generada |
gonzaloMS | 1:2f8c5940c425 | 62 | int cantIgual=0; //Para cuando se corta un cable (1 entrada en 1, las otras 3 en 0) |
gonzaloMS | 1:2f8c5940c425 | 63 | int cantIgual2=0; //Para cuando se corta el segundo cable (2 entradas en 1, las otras 2 en 0) |
gonzaloMS | 1:2f8c5940c425 | 64 | int cantIgual3=0; //Para cuando se corta el tercer cable (3 entradas en 1, la otra en 0) |
gonzaloMS | 0:d644ac0f96b0 | 65 | |
gonzaloMS | 1:2f8c5940c425 | 66 | //Variables donde se guardan valores random que van a determinar cómo queda la secuencia |
gonzaloMS | 1:2f8c5940c425 | 67 | int genSec1; //primer cable a cortar |
gonzaloMS | 1:2f8c5940c425 | 68 | int genSec2; //segundo cable a cortar |
gonzaloMS | 1:2f8c5940c425 | 69 | int genSec3; //tercer cable a cortar |
gonzaloMS | 0:d644ac0f96b0 | 70 | |
gonzaloMS | 1:2f8c5940c425 | 71 | //Vectores que guardan cada parte de la secuencia (que empieza en 0000 y termina en 1111) |
gonzaloMS | 1:2f8c5940c425 | 72 | int vecSec[]={0,0,0,0}; //Primer cable a cortar |
gonzaloMS | 1:2f8c5940c425 | 73 | int vecSec2[]={0,0,0,0}; //Segundo cable a cortar |
gonzaloMS | 1:2f8c5940c425 | 74 | int vecSec3[]={0,0,0,0}; //Tercer cable a cortar |
gonzaloMS | 1:2f8c5940c425 | 75 | int vecSec4[]={0,0,0,0}; //Cuarto cable a cortar |
gonzaloMS | 1:2f8c5940c425 | 76 | |
gonzaloMS | 1:2f8c5940c425 | 77 | //Vector que guarda el estado de las entradas para compararlo con los vectores que guardan la secuencia |
gonzaloMS | 0:d644ac0f96b0 | 78 | int vecChq[]={0,0,0,0}; |
gonzaloMS | 0:d644ac0f96b0 | 79 | |
gonzaloMS | 1:2f8c5940c425 | 80 | //Variable que se queda en 0 si no tiene que parpadear el display y que alterna entre 1 y 0 constantemente en el caso contrario (0 muestra el tiempo y 1 apaga el display) |
gonzaloMS | 0:d644ac0f96b0 | 81 | int parpadeoDisplay=0; |
gonzaloMS | 0:d644ac0f96b0 | 82 | |
gonzaloMS | 1:2f8c5940c425 | 83 | //Variables que informan si el jugador perdió o ganó el juego |
gonzaloMS | 0:d644ac0f96b0 | 84 | int fin=0; |
gonzaloMS | 0:d644ac0f96b0 | 85 | int win=0; |
gonzaloMS | 0:d644ac0f96b0 | 86 | |
gonzaloMS | 1:2f8c5940c425 | 87 | //Variables para los "for" del programa |
gonzaloMS | 0:d644ac0f96b0 | 88 | int i; |
gonzaloMS | 0:d644ac0f96b0 | 89 | int y; |
gonzaloMS | 0:d644ac0f96b0 | 90 | int k; |
gonzaloMS | 0:d644ac0f96b0 | 91 | |
gonzaloMS | 0:d644ac0f96b0 | 92 | |
gonzaloMS | 0:d644ac0f96b0 | 93 | int main() { |
gonzaloMS | 1:2f8c5940c425 | 94 | //Apago los Leds |
gonzaloMS | 0:d644ac0f96b0 | 95 | ledWin=1; |
gonzaloMS | 0:d644ac0f96b0 | 96 | ledLost=1; |
gonzaloMS | 1:2f8c5940c425 | 97 | //Configuro modo de PullUp interno para las 4 entradas (los cuatro cables) y el botón de Reset |
gonzaloMS | 0:d644ac0f96b0 | 98 | E1r.mode(PullUp); |
gonzaloMS | 0:d644ac0f96b0 | 99 | E2r.mode(PullUp); |
gonzaloMS | 0:d644ac0f96b0 | 100 | E3r.mode(PullUp); |
gonzaloMS | 0:d644ac0f96b0 | 101 | E4r.mode(PullUp); |
gonzaloMS | 0:d644ac0f96b0 | 102 | pulsadorReset.mode(PullUp); |
gonzaloMS | 1:2f8c5940c425 | 103 | //Asingo las funciones a los Tickers |
gonzaloMS | 1:2f8c5940c425 | 104 | Tempo.attach(&descuentaTiempo,1); //La funcion descuentaTiempo se va a ejecutar cada 1 segundo |
gonzaloMS | 1:2f8c5940c425 | 105 | Display.attach(&visualizacionDisplays,0.005); //La funcion visualizacionDisplays se va a ejecutar cada 5 milisegundos |
gonzaloMS | 1:2f8c5940c425 | 106 | parpadeoTicker.attach(&parpadeoFuncion,0.5); //La funcion parpadeoFuncion se va a ejecutar cada 0,5 segundos |
gonzaloMS | 0:d644ac0f96b0 | 107 | while(1) { |
gonzaloMS | 1:2f8c5940c425 | 108 | //Llamo a las funciones |
gonzaloMS | 0:d644ac0f96b0 | 109 | generacion(); |
gonzaloMS | 0:d644ac0f96b0 | 110 | chequeo(); |
gonzaloMS | 1:2f8c5940c425 | 111 | winReaccion(); |
gonzaloMS | 0:d644ac0f96b0 | 112 | reset(); |
gonzaloMS | 1:2f8c5940c425 | 113 | //Pongo los estados de las entradas en las variables |
gonzaloMS | 1:2f8c5940c425 | 114 | E1=E1r; |
gonzaloMS | 1:2f8c5940c425 | 115 | E2=E2r; |
gonzaloMS | 1:2f8c5940c425 | 116 | E3=E3r; |
gonzaloMS | 1:2f8c5940c425 | 117 | E4=E4r; |
gonzaloMS | 0:d644ac0f96b0 | 118 | } |
gonzaloMS | 0:d644ac0f96b0 | 119 | } |
gonzaloMS | 1:2f8c5940c425 | 120 | |
gonzaloMS | 0:d644ac0f96b0 | 121 | void reset() |
gonzaloMS | 0:d644ac0f96b0 | 122 | { |
gonzaloMS | 0:d644ac0f96b0 | 123 | if(pulsadorReset==0) |
gonzaloMS | 0:d644ac0f96b0 | 124 | { |
gonzaloMS | 1:2f8c5940c425 | 125 | //si se presiona el pulsador resetea todas las variables, los vectores (vuelven a empezar en 0000) y las máq. de estados empiezan por su estado default |
gonzaloMS | 0:d644ac0f96b0 | 126 | ledWin=1; |
gonzaloMS | 1:2f8c5940c425 | 127 | ledLost=1; |
gonzaloMS | 1:2f8c5940c425 | 128 | switcheo=0; |
gonzaloMS | 0:d644ac0f96b0 | 129 | cantIgual=0; |
gonzaloMS | 0:d644ac0f96b0 | 130 | cantIgual2=0; |
gonzaloMS | 0:d644ac0f96b0 | 131 | cantIgual3=0; |
gonzaloMS | 0:d644ac0f96b0 | 132 | vecSec[0]=0; |
gonzaloMS | 0:d644ac0f96b0 | 133 | vecSec[1]=0; |
gonzaloMS | 0:d644ac0f96b0 | 134 | vecSec[2]=0; |
gonzaloMS | 0:d644ac0f96b0 | 135 | vecSec[3]=0; |
gonzaloMS | 0:d644ac0f96b0 | 136 | vecSec2[0]=0; |
gonzaloMS | 0:d644ac0f96b0 | 137 | vecSec2[1]=0; |
gonzaloMS | 0:d644ac0f96b0 | 138 | vecSec2[2]=0; |
gonzaloMS | 0:d644ac0f96b0 | 139 | vecSec2[3]=0; |
gonzaloMS | 0:d644ac0f96b0 | 140 | vecSec3[0]=0; |
gonzaloMS | 0:d644ac0f96b0 | 141 | vecSec3[1]=0; |
gonzaloMS | 0:d644ac0f96b0 | 142 | vecSec3[2]=0; |
gonzaloMS | 0:d644ac0f96b0 | 143 | vecSec3[3]=0; |
gonzaloMS | 0:d644ac0f96b0 | 144 | vecSec4[0]=0; |
gonzaloMS | 0:d644ac0f96b0 | 145 | vecSec4[1]=0; |
gonzaloMS | 0:d644ac0f96b0 | 146 | vecSec4[2]=0; |
gonzaloMS | 0:d644ac0f96b0 | 147 | vecSec4[3]=0; |
gonzaloMS | 0:d644ac0f96b0 | 148 | vecChq[0]=0; |
gonzaloMS | 0:d644ac0f96b0 | 149 | vecChq[1]=0; |
gonzaloMS | 0:d644ac0f96b0 | 150 | vecChq[2]=0; |
gonzaloMS | 0:d644ac0f96b0 | 151 | vecChq[3]=0; |
gonzaloMS | 0:d644ac0f96b0 | 152 | parpadeoDisplay=0; |
gonzaloMS | 1:2f8c5940c425 | 153 | tiempo=60; |
gonzaloMS | 0:d644ac0f96b0 | 154 | win=0; |
gonzaloMS | 0:d644ac0f96b0 | 155 | fin=0; |
gonzaloMS | 0:d644ac0f96b0 | 156 | secuencia=INICIO; |
gonzaloMS | 1:2f8c5940c425 | 157 | check=BEGINNING; |
gonzaloMS | 0:d644ac0f96b0 | 158 | } |
gonzaloMS | 0:d644ac0f96b0 | 159 | } |
gonzaloMS | 1:2f8c5940c425 | 160 | |
gonzaloMS | 1:2f8c5940c425 | 161 | void winReaccion() |
gonzaloMS | 0:d644ac0f96b0 | 162 | { |
gonzaloMS | 1:2f8c5940c425 | 163 | //Si el jugador ganó, se prende el led verde y se apaga el rojo |
gonzaloMS | 0:d644ac0f96b0 | 164 | if(win==1) |
gonzaloMS | 0:d644ac0f96b0 | 165 | { |
gonzaloMS | 0:d644ac0f96b0 | 166 | ledWin=0; |
gonzaloMS | 0:d644ac0f96b0 | 167 | ledLost=1; |
gonzaloMS | 0:d644ac0f96b0 | 168 | } |
gonzaloMS | 0:d644ac0f96b0 | 169 | } |
gonzaloMS | 1:2f8c5940c425 | 170 | |
gonzaloMS | 0:d644ac0f96b0 | 171 | void parpadeoFuncion() |
gonzaloMS | 0:d644ac0f96b0 | 172 | { |
gonzaloMS | 1:2f8c5940c425 | 173 | //Si el jugador perdió, cada 0,5 segundos que entra en la funcion cambia el estado del led rojo de 0 a 1 |
gonzaloMS | 0:d644ac0f96b0 | 174 | if(fin==1) |
gonzaloMS | 0:d644ac0f96b0 | 175 | { |
gonzaloMS | 0:d644ac0f96b0 | 176 | ledLost=!ledLost; |
gonzaloMS | 0:d644ac0f96b0 | 177 | } |
gonzaloMS | 1:2f8c5940c425 | 178 | //Si el jugador perdió o ganó, cada 0,5 segundos que entra en la funcion va a cambiar entre 0 y 1 la variable que indica si se tiene que mostrar el tiempo o apagar los displays |
gonzaloMS | 0:d644ac0f96b0 | 179 | if(fin==1 || win==1) |
gonzaloMS | 0:d644ac0f96b0 | 180 | { |
gonzaloMS | 0:d644ac0f96b0 | 181 | parpadeoDisplay=!parpadeoDisplay; |
gonzaloMS | 0:d644ac0f96b0 | 182 | } |
gonzaloMS | 0:d644ac0f96b0 | 183 | } |
gonzaloMS | 1:2f8c5940c425 | 184 | |
gonzaloMS | 1:2f8c5940c425 | 185 | void descuentaTiempo() |
gonzaloMS | 0:d644ac0f96b0 | 186 | { |
gonzaloMS | 1:2f8c5940c425 | 187 | //Si el juego no terminó, cada 1 segundo le resta 1 a la variable tiempo, que empieza en 60, hasta que llega a 0 e indica que el jugador perdió. |
gonzaloMS | 1:2f8c5940c425 | 188 | //También cada 1 segundo muestra el estado de las variables importantes para el jugador para facilitar la depuración |
gonzaloMS | 0:d644ac0f96b0 | 189 | if(fin==0 && win==0) |
gonzaloMS | 0:d644ac0f96b0 | 190 | { |
gonzaloMS | 1:2f8c5940c425 | 191 | if(tiempo>0) |
gonzaloMS | 0:d644ac0f96b0 | 192 | { |
gonzaloMS | 1:2f8c5940c425 | 193 | tiempo--; |
gonzaloMS | 0:d644ac0f96b0 | 194 | } |
gonzaloMS | 0:d644ac0f96b0 | 195 | else |
gonzaloMS | 0:d644ac0f96b0 | 196 | { |
gonzaloMS | 0:d644ac0f96b0 | 197 | fin=1; |
gonzaloMS | 0:d644ac0f96b0 | 198 | } |
gonzaloMS | 0:d644ac0f96b0 | 199 | printf("A lograr: \n"); |
gonzaloMS | 0:d644ac0f96b0 | 200 | printf("%d %d %d %d \n",*vecSec,*(vecSec+1),*(vecSec+2),*(vecSec+3)); |
gonzaloMS | 0:d644ac0f96b0 | 201 | printf("%d %d %d %d \n",*vecSec2,*(vecSec2+1),*(vecSec2+2),*(vecSec2+3)); |
gonzaloMS | 0:d644ac0f96b0 | 202 | printf("%d %d %d %d \n",*vecSec3,*(vecSec3+1),*(vecSec3+2),*(vecSec3+3)); |
gonzaloMS | 0:d644ac0f96b0 | 203 | printf("%d %d %d %d \n",*vecSec4,*(vecSec4+1),*(vecSec4+2),*(vecSec4+3)); |
gonzaloMS | 1:2f8c5940c425 | 204 | printf("Entradas: %d %d %d %d \n", E1,E2,E3,E4); |
gonzaloMS | 1:2f8c5940c425 | 205 | printf("Tiempo (en segundos): %d \n \n",tiempo); |
gonzaloMS | 0:d644ac0f96b0 | 206 | } |
gonzaloMS | 0:d644ac0f96b0 | 207 | } |
gonzaloMS | 1:2f8c5940c425 | 208 | |
gonzaloMS | 1:2f8c5940c425 | 209 | void visualizacionDisplays() |
gonzaloMS | 0:d644ac0f96b0 | 210 | { |
gonzaloMS | 1:2f8c5940c425 | 211 | //Consigo el numero perteneciente a las decenas del tiempo y lo guardo en la variable. Lo mismo para las unidades del tiempo |
gonzaloMS | 1:2f8c5940c425 | 212 | Decenas=tiempo/10; |
gonzaloMS | 1:2f8c5940c425 | 213 | Unidades=tiempo-((tiempo/10)*10); |
gonzaloMS | 1:2f8c5940c425 | 214 | //Si no tiene que parpadear el display, va cambiar entre mostrar las decenas y unidades cada 5 milisegundos que entra a la funcion |
gonzaloMS | 1:2f8c5940c425 | 215 | //Si tiene que parpadear, parpadeoDisplay cambia entre 0 y 1, mostrando el tiempo en un momento y apagando los displays en otro |
gonzaloMS | 1:2f8c5940c425 | 216 | if(parpadeoDisplay==0) |
gonzaloMS | 1:2f8c5940c425 | 217 | { |
gonzaloMS | 1:2f8c5940c425 | 218 | //Si switcheo es par, muestra decenas, y si es impar, muestra unidades. La posicion 0 del vector corresponde al numero 0, y así hasta el 9 |
gonzaloMS | 1:2f8c5940c425 | 219 | if(switcheo%2==0) |
gonzaloMS | 0:d644ac0f96b0 | 220 | { |
gonzaloMS | 1:2f8c5940c425 | 221 | Displays=numerosD[Decenas]; |
gonzaloMS | 0:d644ac0f96b0 | 222 | } |
gonzaloMS | 0:d644ac0f96b0 | 223 | else |
gonzaloMS | 0:d644ac0f96b0 | 224 | { |
gonzaloMS | 1:2f8c5940c425 | 225 | Displays=numerosU[Unidades]; |
gonzaloMS | 0:d644ac0f96b0 | 226 | } |
gonzaloMS | 1:2f8c5940c425 | 227 | } |
gonzaloMS | 1:2f8c5940c425 | 228 | else |
gonzaloMS | 1:2f8c5940c425 | 229 | { |
gonzaloMS | 1:2f8c5940c425 | 230 | Displays=0; |
gonzaloMS | 1:2f8c5940c425 | 231 | } |
gonzaloMS | 1:2f8c5940c425 | 232 | //Como no importa el número en sí, para que no se haga muy grande para en 200 y vuelve a 0 |
gonzaloMS | 1:2f8c5940c425 | 233 | if(switcheo==200) |
gonzaloMS | 1:2f8c5940c425 | 234 | { |
gonzaloMS | 1:2f8c5940c425 | 235 | switcheo=0; |
gonzaloMS | 1:2f8c5940c425 | 236 | } |
gonzaloMS | 1:2f8c5940c425 | 237 | //switcheo aumenta en 1 cada vez que se entra a la funcion |
gonzaloMS | 1:2f8c5940c425 | 238 | switcheo++; |
gonzaloMS | 0:d644ac0f96b0 | 239 | } |
gonzaloMS | 0:d644ac0f96b0 | 240 | |
gonzaloMS | 0:d644ac0f96b0 | 241 | void generacion(){ |
gonzaloMS | 0:d644ac0f96b0 | 242 | switch(secuencia) |
gonzaloMS | 0:d644ac0f96b0 | 243 | { |
gonzaloMS | 1:2f8c5940c425 | 244 | default: |
gonzaloMS | 0:d644ac0f96b0 | 245 | case INICIO: |
gonzaloMS | 1:2f8c5940c425 | 246 | //Se reinician las variables que se encargan de generar la secuencia |
gonzaloMS | 1:2f8c5940c425 | 247 | genSec1=0; |
gonzaloMS | 1:2f8c5940c425 | 248 | genSec2=0; |
gonzaloMS | 1:2f8c5940c425 | 249 | genSec3=0; |
gonzaloMS | 1:2f8c5940c425 | 250 | //Pasa directamente al estado GENERA1 |
gonzaloMS | 0:d644ac0f96b0 | 251 | secuencia=GENERA1; |
gonzaloMS | 0:d644ac0f96b0 | 252 | break; |
gonzaloMS | 0:d644ac0f96b0 | 253 | |
gonzaloMS | 0:d644ac0f96b0 | 254 | case GENERA1: |
gonzaloMS | 1:2f8c5940c425 | 255 | //Se le asigna un valor random entre 1 y 4 a la variable genSec1 |
gonzaloMS | 1:2f8c5940c425 | 256 | genSec1=rand()%4+1; |
gonzaloMS | 1:2f8c5940c425 | 257 | //Dependiendo del valor, se le suma 1 a 1 de las 4 posiciones del vector |
gonzaloMS | 1:2f8c5940c425 | 258 | if(genSec1==1) |
gonzaloMS | 0:d644ac0f96b0 | 259 | { |
gonzaloMS | 0:d644ac0f96b0 | 260 | vecSec[0]++; |
gonzaloMS | 0:d644ac0f96b0 | 261 | } |
gonzaloMS | 1:2f8c5940c425 | 262 | else if(genSec1==2) |
gonzaloMS | 0:d644ac0f96b0 | 263 | { |
gonzaloMS | 0:d644ac0f96b0 | 264 | vecSec[1]++; |
gonzaloMS | 0:d644ac0f96b0 | 265 | } |
gonzaloMS | 1:2f8c5940c425 | 266 | else if(genSec1==3) |
gonzaloMS | 0:d644ac0f96b0 | 267 | { |
gonzaloMS | 0:d644ac0f96b0 | 268 | vecSec[2]++; |
gonzaloMS | 0:d644ac0f96b0 | 269 | } |
gonzaloMS | 1:2f8c5940c425 | 270 | else if(genSec1==4) |
gonzaloMS | 0:d644ac0f96b0 | 271 | { |
gonzaloMS | 0:d644ac0f96b0 | 272 | vecSec[3]++; |
gonzaloMS | 0:d644ac0f96b0 | 273 | } |
gonzaloMS | 1:2f8c5940c425 | 274 | //Pasa directamente al estado GENERA2 |
gonzaloMS | 0:d644ac0f96b0 | 275 | secuencia=GENERA2; |
gonzaloMS | 0:d644ac0f96b0 | 276 | break; |
gonzaloMS | 0:d644ac0f96b0 | 277 | |
gonzaloMS | 0:d644ac0f96b0 | 278 | case GENERA2: |
gonzaloMS | 1:2f8c5940c425 | 279 | //Se le asigna un valor random entre 1 y 4 a la variable genSec2 |
gonzaloMS | 1:2f8c5940c425 | 280 | genSec2=rand()%4+1; |
gonzaloMS | 1:2f8c5940c425 | 281 | //Se copia el contenido del vector de la primera parte de la secuencia al del vector de la segunda parte de la secuencia |
gonzaloMS | 0:d644ac0f96b0 | 282 | vecSec2[0]=vecSec[0]; |
gonzaloMS | 0:d644ac0f96b0 | 283 | vecSec2[1]=vecSec[1]; |
gonzaloMS | 0:d644ac0f96b0 | 284 | vecSec2[2]=vecSec[2]; |
gonzaloMS | 0:d644ac0f96b0 | 285 | vecSec2[3]=vecSec[3]; |
gonzaloMS | 1:2f8c5940c425 | 286 | //Dependiendo del valor, se le suma 1 a 1 de las 4 posiciones del vector, excepto que la posicion a la que busca sumar 1 ya sea 1 de la generacion anterior |
gonzaloMS | 1:2f8c5940c425 | 287 | //Si la posicion ya era 1 de antes, se vuelve a hacer el proceso (que incluye volver a generar un número random) |
gonzaloMS | 1:2f8c5940c425 | 288 | if(genSec2==1) |
gonzaloMS | 0:d644ac0f96b0 | 289 | { |
gonzaloMS | 0:d644ac0f96b0 | 290 | if(vecSec2[0]==1) |
gonzaloMS | 0:d644ac0f96b0 | 291 | { |
gonzaloMS | 0:d644ac0f96b0 | 292 | secuencia=GENERA2; |
gonzaloMS | 0:d644ac0f96b0 | 293 | } |
gonzaloMS | 0:d644ac0f96b0 | 294 | else |
gonzaloMS | 0:d644ac0f96b0 | 295 | { |
gonzaloMS | 0:d644ac0f96b0 | 296 | vecSec2[0]++; |
gonzaloMS | 0:d644ac0f96b0 | 297 | } |
gonzaloMS | 0:d644ac0f96b0 | 298 | } |
gonzaloMS | 1:2f8c5940c425 | 299 | else if(genSec2==2) |
gonzaloMS | 0:d644ac0f96b0 | 300 | { |
gonzaloMS | 0:d644ac0f96b0 | 301 | if(vecSec2[1]==1) |
gonzaloMS | 0:d644ac0f96b0 | 302 | { |
gonzaloMS | 0:d644ac0f96b0 | 303 | secuencia=GENERA2; |
gonzaloMS | 0:d644ac0f96b0 | 304 | } |
gonzaloMS | 0:d644ac0f96b0 | 305 | else |
gonzaloMS | 0:d644ac0f96b0 | 306 | { |
gonzaloMS | 0:d644ac0f96b0 | 307 | vecSec2[1]++; |
gonzaloMS | 0:d644ac0f96b0 | 308 | } |
gonzaloMS | 0:d644ac0f96b0 | 309 | } |
gonzaloMS | 1:2f8c5940c425 | 310 | else if(genSec2==3) |
gonzaloMS | 0:d644ac0f96b0 | 311 | { |
gonzaloMS | 0:d644ac0f96b0 | 312 | if(vecSec2[2]==1) |
gonzaloMS | 0:d644ac0f96b0 | 313 | { |
gonzaloMS | 0:d644ac0f96b0 | 314 | secuencia=GENERA2; |
gonzaloMS | 0:d644ac0f96b0 | 315 | } |
gonzaloMS | 0:d644ac0f96b0 | 316 | else |
gonzaloMS | 0:d644ac0f96b0 | 317 | { |
gonzaloMS | 0:d644ac0f96b0 | 318 | vecSec2[2]++; |
gonzaloMS | 0:d644ac0f96b0 | 319 | } |
gonzaloMS | 0:d644ac0f96b0 | 320 | } |
gonzaloMS | 1:2f8c5940c425 | 321 | else if(genSec2==4) |
gonzaloMS | 0:d644ac0f96b0 | 322 | { |
gonzaloMS | 0:d644ac0f96b0 | 323 | if(vecSec2[3]==1) |
gonzaloMS | 0:d644ac0f96b0 | 324 | { |
gonzaloMS | 0:d644ac0f96b0 | 325 | secuencia=GENERA2; |
gonzaloMS | 0:d644ac0f96b0 | 326 | } |
gonzaloMS | 0:d644ac0f96b0 | 327 | else |
gonzaloMS | 0:d644ac0f96b0 | 328 | { |
gonzaloMS | 0:d644ac0f96b0 | 329 | vecSec2[3]++; |
gonzaloMS | 0:d644ac0f96b0 | 330 | } |
gonzaloMS | 0:d644ac0f96b0 | 331 | } |
gonzaloMS | 1:2f8c5940c425 | 332 | //Se busca verificar que el vector de la segunda parte de la secuencia contenga dos posiciones en 1. En ese caso, pasa al estado GENERA3 |
gonzaloMS | 1:2f8c5940c425 | 333 | //Sino vuelve a hacer el proceso |
gonzaloMS | 0:d644ac0f96b0 | 334 | if((vecSec2[0]+vecSec2[1]+vecSec2[2]+vecSec2[3]) == 2) |
gonzaloMS | 0:d644ac0f96b0 | 335 | { |
gonzaloMS | 0:d644ac0f96b0 | 336 | secuencia=GENERA3; |
gonzaloMS | 0:d644ac0f96b0 | 337 | } |
gonzaloMS | 0:d644ac0f96b0 | 338 | else |
gonzaloMS | 0:d644ac0f96b0 | 339 | { |
gonzaloMS | 0:d644ac0f96b0 | 340 | secuencia=GENERA2; |
gonzaloMS | 0:d644ac0f96b0 | 341 | } |
gonzaloMS | 0:d644ac0f96b0 | 342 | break; |
gonzaloMS | 0:d644ac0f96b0 | 343 | |
gonzaloMS | 0:d644ac0f96b0 | 344 | case GENERA3: |
gonzaloMS | 1:2f8c5940c425 | 345 | //Se le asigna un valor random entre 1 y 4 a la variable genSec3 |
gonzaloMS | 1:2f8c5940c425 | 346 | genSec3=rand()%4+1; |
gonzaloMS | 1:2f8c5940c425 | 347 | //Se copia el contenido del vector de la segunda parte de la secuencia al del vector de la tercera parte de la secuencia |
gonzaloMS | 0:d644ac0f96b0 | 348 | vecSec3[0]=vecSec2[0]; |
gonzaloMS | 0:d644ac0f96b0 | 349 | vecSec3[1]=vecSec2[1]; |
gonzaloMS | 0:d644ac0f96b0 | 350 | vecSec3[2]=vecSec2[2]; |
gonzaloMS | 0:d644ac0f96b0 | 351 | vecSec3[3]=vecSec2[3]; |
gonzaloMS | 1:2f8c5940c425 | 352 | //Dependiendo del valor, se le suma 1 a 1 de las 4 posiciones del vector, excepto que la posicion a la que busca sumar 1 ya sea 1 de la generacion anterior |
gonzaloMS | 1:2f8c5940c425 | 353 | //Si la posicion ya era 1 de antes, se vuelve a hacer el proceso (que incluye volver a generar un número random) |
gonzaloMS | 1:2f8c5940c425 | 354 | if(genSec3==1) |
gonzaloMS | 0:d644ac0f96b0 | 355 | { |
gonzaloMS | 0:d644ac0f96b0 | 356 | if(vecSec3[0]==1) |
gonzaloMS | 0:d644ac0f96b0 | 357 | { |
gonzaloMS | 0:d644ac0f96b0 | 358 | secuencia=GENERA3; |
gonzaloMS | 0:d644ac0f96b0 | 359 | } |
gonzaloMS | 0:d644ac0f96b0 | 360 | else |
gonzaloMS | 0:d644ac0f96b0 | 361 | { |
gonzaloMS | 0:d644ac0f96b0 | 362 | vecSec3[0]++; |
gonzaloMS | 0:d644ac0f96b0 | 363 | } |
gonzaloMS | 0:d644ac0f96b0 | 364 | } |
gonzaloMS | 1:2f8c5940c425 | 365 | else if(genSec3==2) |
gonzaloMS | 0:d644ac0f96b0 | 366 | { |
gonzaloMS | 0:d644ac0f96b0 | 367 | if(vecSec3[1]==1) |
gonzaloMS | 0:d644ac0f96b0 | 368 | { |
gonzaloMS | 0:d644ac0f96b0 | 369 | secuencia=GENERA3; |
gonzaloMS | 0:d644ac0f96b0 | 370 | } |
gonzaloMS | 0:d644ac0f96b0 | 371 | else |
gonzaloMS | 0:d644ac0f96b0 | 372 | { |
gonzaloMS | 0:d644ac0f96b0 | 373 | vecSec3[1]++; |
gonzaloMS | 0:d644ac0f96b0 | 374 | } |
gonzaloMS | 0:d644ac0f96b0 | 375 | } |
gonzaloMS | 1:2f8c5940c425 | 376 | else if(genSec3==3) |
gonzaloMS | 0:d644ac0f96b0 | 377 | { |
gonzaloMS | 0:d644ac0f96b0 | 378 | if(vecSec3[2]==1) |
gonzaloMS | 0:d644ac0f96b0 | 379 | { |
gonzaloMS | 0:d644ac0f96b0 | 380 | secuencia=GENERA3; |
gonzaloMS | 0:d644ac0f96b0 | 381 | } |
gonzaloMS | 0:d644ac0f96b0 | 382 | else |
gonzaloMS | 0:d644ac0f96b0 | 383 | { |
gonzaloMS | 0:d644ac0f96b0 | 384 | vecSec3[2]++; |
gonzaloMS | 0:d644ac0f96b0 | 385 | } |
gonzaloMS | 0:d644ac0f96b0 | 386 | } |
gonzaloMS | 1:2f8c5940c425 | 387 | else if(genSec3==4) |
gonzaloMS | 0:d644ac0f96b0 | 388 | { |
gonzaloMS | 0:d644ac0f96b0 | 389 | if(vecSec3[3]==1) |
gonzaloMS | 0:d644ac0f96b0 | 390 | { |
gonzaloMS | 0:d644ac0f96b0 | 391 | secuencia=GENERA3; |
gonzaloMS | 0:d644ac0f96b0 | 392 | } |
gonzaloMS | 0:d644ac0f96b0 | 393 | else |
gonzaloMS | 0:d644ac0f96b0 | 394 | { |
gonzaloMS | 0:d644ac0f96b0 | 395 | vecSec3[3]++; |
gonzaloMS | 0:d644ac0f96b0 | 396 | } |
gonzaloMS | 0:d644ac0f96b0 | 397 | } |
gonzaloMS | 1:2f8c5940c425 | 398 | //Se busca verificar que el vector de la tercera parte de la secuencia contenga tres posiciones en 1. En ese caso, pasa al estado FIN |
gonzaloMS | 1:2f8c5940c425 | 399 | //Sino vuelve a hacer el proceso |
gonzaloMS | 0:d644ac0f96b0 | 400 | if((vecSec3[0]+vecSec3[1]+vecSec3[2]+vecSec3[3]) == 3) |
gonzaloMS | 0:d644ac0f96b0 | 401 | { |
gonzaloMS | 0:d644ac0f96b0 | 402 | secuencia=FIN; |
gonzaloMS | 0:d644ac0f96b0 | 403 | } |
gonzaloMS | 0:d644ac0f96b0 | 404 | else |
gonzaloMS | 0:d644ac0f96b0 | 405 | { |
gonzaloMS | 0:d644ac0f96b0 | 406 | secuencia=GENERA3; |
gonzaloMS | 0:d644ac0f96b0 | 407 | } |
gonzaloMS | 0:d644ac0f96b0 | 408 | break; |
gonzaloMS | 0:d644ac0f96b0 | 409 | |
gonzaloMS | 0:d644ac0f96b0 | 410 | case FIN: |
gonzaloMS | 1:2f8c5940c425 | 411 | //Termina con todas las posiciones en 1. Se mantiene en este estado hasta que se presione el botón de reset |
gonzaloMS | 0:d644ac0f96b0 | 412 | vecSec4[0]=1; |
gonzaloMS | 0:d644ac0f96b0 | 413 | vecSec4[1]=1; |
gonzaloMS | 0:d644ac0f96b0 | 414 | vecSec4[2]=1; |
gonzaloMS | 0:d644ac0f96b0 | 415 | vecSec4[3]=1; |
gonzaloMS | 0:d644ac0f96b0 | 416 | secuencia=FIN; |
gonzaloMS | 0:d644ac0f96b0 | 417 | break; |
gonzaloMS | 0:d644ac0f96b0 | 418 | } |
gonzaloMS | 1:2f8c5940c425 | 419 | } |
gonzaloMS | 1:2f8c5940c425 | 420 | |
gonzaloMS | 1:2f8c5940c425 | 421 | void chequeo(){ |
gonzaloMS | 1:2f8c5940c425 | 422 | switch(check) |
gonzaloMS | 1:2f8c5940c425 | 423 | { |
gonzaloMS | 1:2f8c5940c425 | 424 | default: |
gonzaloMS | 1:2f8c5940c425 | 425 | case BEGINNING: |
gonzaloMS | 1:2f8c5940c425 | 426 | //Si todas las entradas están conectadas (ningún cable sin cortar), se queda en este estado, sino cambia a CHECK1 |
gonzaloMS | 1:2f8c5940c425 | 427 | if(E1!=0 || E2!=0 || E3!=0 || E4!=0) |
gonzaloMS | 1:2f8c5940c425 | 428 | { |
gonzaloMS | 1:2f8c5940c425 | 429 | check=CHECK1; |
gonzaloMS | 1:2f8c5940c425 | 430 | } |
gonzaloMS | 1:2f8c5940c425 | 431 | else |
gonzaloMS | 1:2f8c5940c425 | 432 | { |
gonzaloMS | 1:2f8c5940c425 | 433 | check=BEGINNING; |
gonzaloMS | 1:2f8c5940c425 | 434 | } |
gonzaloMS | 1:2f8c5940c425 | 435 | break; |
gonzaloMS | 1:2f8c5940c425 | 436 | |
gonzaloMS | 1:2f8c5940c425 | 437 | case CHECK1: |
gonzaloMS | 1:2f8c5940c425 | 438 | //El estado de las entradas al "desconectar" una se guarda en los vectores |
gonzaloMS | 1:2f8c5940c425 | 439 | vecChq[0]=E1; |
gonzaloMS | 1:2f8c5940c425 | 440 | vecChq[1]=E2; |
gonzaloMS | 1:2f8c5940c425 | 441 | vecChq[2]=E3; |
gonzaloMS | 1:2f8c5940c425 | 442 | vecChq[3]=E4; |
gonzaloMS | 1:2f8c5940c425 | 443 | //Se fija si el estado de las 4 entradas corresponde con la secuencia al desconectar solo una de las entradas |
gonzaloMS | 1:2f8c5940c425 | 444 | for(i=0;i<4;i++) |
gonzaloMS | 1:2f8c5940c425 | 445 | { |
gonzaloMS | 1:2f8c5940c425 | 446 | if(vecSec[i]==vecChq[i]) |
gonzaloMS | 1:2f8c5940c425 | 447 | { |
gonzaloMS | 1:2f8c5940c425 | 448 | cantIgual++; |
gonzaloMS | 1:2f8c5940c425 | 449 | } |
gonzaloMS | 1:2f8c5940c425 | 450 | } |
gonzaloMS | 1:2f8c5940c425 | 451 | //Si solo se desconectó una y era la que debía ser según la secuencia, se vuelve a hacer el proceso. Si era una incorrecta, perdiste el juego |
gonzaloMS | 1:2f8c5940c425 | 452 | if((vecChq[0]+vecChq[1]+vecChq[2]+vecChq[3])==1) |
gonzaloMS | 1:2f8c5940c425 | 453 | { |
gonzaloMS | 1:2f8c5940c425 | 454 | if(cantIgual!=4) |
gonzaloMS | 1:2f8c5940c425 | 455 | { |
gonzaloMS | 1:2f8c5940c425 | 456 | check=ENDGAME; |
gonzaloMS | 1:2f8c5940c425 | 457 | } |
gonzaloMS | 1:2f8c5940c425 | 458 | else |
gonzaloMS | 1:2f8c5940c425 | 459 | { |
gonzaloMS | 1:2f8c5940c425 | 460 | cantIgual=0; |
gonzaloMS | 1:2f8c5940c425 | 461 | check=CHECK1; |
gonzaloMS | 1:2f8c5940c425 | 462 | } |
gonzaloMS | 1:2f8c5940c425 | 463 | } |
gonzaloMS | 1:2f8c5940c425 | 464 | //Si la primera que se había desconectado era la correcta y se desconecta otra más, pasa al estado CHECK2 |
gonzaloMS | 1:2f8c5940c425 | 465 | else if(vecChq[0]+vecChq[1]+vecChq[2]+vecChq[3])==2) |
gonzaloMS | 1:2f8c5940c425 | 466 | { |
gonzaloMS | 1:2f8c5940c425 | 467 | check=CHECK2; |
gonzaloMS | 1:2f8c5940c425 | 468 | } |
gonzaloMS | 1:2f8c5940c425 | 469 | break; |
gonzaloMS | 1:2f8c5940c425 | 470 | |
gonzaloMS | 1:2f8c5940c425 | 471 | case CHECK2: |
gonzaloMS | 1:2f8c5940c425 | 472 | //El estado de las entradas al desconectar la segunda se guarda en los vectores |
gonzaloMS | 1:2f8c5940c425 | 473 | vecChq[0]=E1; |
gonzaloMS | 1:2f8c5940c425 | 474 | vecChq[1]=E2; |
gonzaloMS | 1:2f8c5940c425 | 475 | vecChq[2]=E3; |
gonzaloMS | 1:2f8c5940c425 | 476 | vecChq[3]=E4; |
gonzaloMS | 1:2f8c5940c425 | 477 | //Se fija si el estado de las 4 entradas corresponde con a la secuencia al desconectar la segunda entrada |
gonzaloMS | 1:2f8c5940c425 | 478 | for(y=0;y<4;y++) |
gonzaloMS | 1:2f8c5940c425 | 479 | { |
gonzaloMS | 1:2f8c5940c425 | 480 | if(vecSec2[y]==vecChq[y]) |
gonzaloMS | 1:2f8c5940c425 | 481 | { |
gonzaloMS | 1:2f8c5940c425 | 482 | cantIgual2++; |
gonzaloMS | 1:2f8c5940c425 | 483 | } |
gonzaloMS | 1:2f8c5940c425 | 484 | } |
gonzaloMS | 1:2f8c5940c425 | 485 | //Si al desconectar la segunda entrada era la que debía ser según la secuencia, se vuelve a hacer el proceso. Si era una incorrecta, perdiste el juego |
gonzaloMS | 1:2f8c5940c425 | 486 | if(vecChq[0]+vecChq[1]+vecChq[2]+vecChq[3])==2) |
gonzaloMS | 1:2f8c5940c425 | 487 | { |
gonzaloMS | 1:2f8c5940c425 | 488 | if(cantIgual2!=4) |
gonzaloMS | 1:2f8c5940c425 | 489 | { |
gonzaloMS | 1:2f8c5940c425 | 490 | check=ENDGAME; |
gonzaloMS | 1:2f8c5940c425 | 491 | } |
gonzaloMS | 1:2f8c5940c425 | 492 | if(cantIgual==4) |
gonzaloMS | 1:2f8c5940c425 | 493 | { |
gonzaloMS | 1:2f8c5940c425 | 494 | check=CHECK2; |
gonzaloMS | 1:2f8c5940c425 | 495 | } |
gonzaloMS | 1:2f8c5940c425 | 496 | } |
gonzaloMS | 1:2f8c5940c425 | 497 | //Si la segunda que se había desconectado era la correcta y se desconecta otra más, pasa al estado CHECK3 |
gonzaloMS | 1:2f8c5940c425 | 498 | else if(vecChq[0]+vecChq[1]+vecChq[2]+vecChq[3])==3) |
gonzaloMS | 1:2f8c5940c425 | 499 | { |
gonzaloMS | 1:2f8c5940c425 | 500 | check=CHECK3; |
gonzaloMS | 1:2f8c5940c425 | 501 | } |
gonzaloMS | 1:2f8c5940c425 | 502 | break; |
gonzaloMS | 1:2f8c5940c425 | 503 | |
gonzaloMS | 1:2f8c5940c425 | 504 | case CHECK3: |
gonzaloMS | 1:2f8c5940c425 | 505 | //El estado de las entradas al desconectar la tercera se guarda en los vectores |
gonzaloMS | 1:2f8c5940c425 | 506 | vecChq[0]=E1; |
gonzaloMS | 1:2f8c5940c425 | 507 | vecChq[1]=E2; |
gonzaloMS | 1:2f8c5940c425 | 508 | vecChq[2]=E3; |
gonzaloMS | 1:2f8c5940c425 | 509 | vecChq[3]=E4; |
gonzaloMS | 1:2f8c5940c425 | 510 | //Se fija si el estado de las 4 entradas corresponde con a la secuencia al desconectar la tercera entrada |
gonzaloMS | 1:2f8c5940c425 | 511 | for(k=0;k<4;k++) |
gonzaloMS | 1:2f8c5940c425 | 512 | { |
gonzaloMS | 1:2f8c5940c425 | 513 | if(vecSec3[k]==vecChq[k]) |
gonzaloMS | 1:2f8c5940c425 | 514 | { |
gonzaloMS | 1:2f8c5940c425 | 515 | cantIgual3++; |
gonzaloMS | 1:2f8c5940c425 | 516 | } |
gonzaloMS | 1:2f8c5940c425 | 517 | } |
gonzaloMS | 1:2f8c5940c425 | 518 | //Si al desconectar la tercera entrada era la que debía ser según la secuencia, se vuelve a hacer el proceso. Si era una incorrecta, perdiste el juego |
gonzaloMS | 1:2f8c5940c425 | 519 | if(vecChq[0]+vecChq[1]+vecChq[2]+vecChq[3])==3) |
gonzaloMS | 1:2f8c5940c425 | 520 | { |
gonzaloMS | 1:2f8c5940c425 | 521 | if(cantIgual3!=4) |
gonzaloMS | 1:2f8c5940c425 | 522 | { |
gonzaloMS | 1:2f8c5940c425 | 523 | check=ENDGAME; |
gonzaloMS | 1:2f8c5940c425 | 524 | } |
gonzaloMS | 1:2f8c5940c425 | 525 | if(cantIgual3==4) |
gonzaloMS | 1:2f8c5940c425 | 526 | { |
gonzaloMS | 1:2f8c5940c425 | 527 | check=CHECK3; |
gonzaloMS | 1:2f8c5940c425 | 528 | } |
gonzaloMS | 1:2f8c5940c425 | 529 | } |
gonzaloMS | 1:2f8c5940c425 | 530 | //Si la tercera que se había desconectado era la correcta y se desconecta la última, evidentemente es la correcta y ganaste el juego |
gonzaloMS | 1:2f8c5940c425 | 531 | else if(vecChq[0]+vecChq[1]+vecChq[2]+vecChq[3])==4) |
gonzaloMS | 1:2f8c5940c425 | 532 | { |
gonzaloMS | 1:2f8c5940c425 | 533 | check=WINGAME; |
gonzaloMS | 1:2f8c5940c425 | 534 | } |
gonzaloMS | 1:2f8c5940c425 | 535 | break; |
gonzaloMS | 1:2f8c5940c425 | 536 | |
gonzaloMS | 1:2f8c5940c425 | 537 | case ENDGAME: |
gonzaloMS | 1:2f8c5940c425 | 538 | //Indica que se perdió el juego |
gonzaloMS | 1:2f8c5940c425 | 539 | fin=1; |
gonzaloMS | 1:2f8c5940c425 | 540 | check=ENDGAME; |
gonzaloMS | 1:2f8c5940c425 | 541 | break; |
gonzaloMS | 1:2f8c5940c425 | 542 | |
gonzaloMS | 1:2f8c5940c425 | 543 | case WINGAME: |
gonzaloMS | 1:2f8c5940c425 | 544 | //Indica que se ganó el juego |
gonzaloMS | 1:2f8c5940c425 | 545 | win=1; |
gonzaloMS | 1:2f8c5940c425 | 546 | check=WINGAME; |
gonzaloMS | 1:2f8c5940c425 | 547 | break; |
gonzaloMS | 1:2f8c5940c425 | 548 | } |
gonzaloMS | 0:d644ac0f96b0 | 549 | } |