Selecciona los juegos

Dependencies:   mbed

Revision:
5:1bee785cac7f
Parent:
4:4d6b70e3dda3
diff -r 4d6b70e3dda3 -r 1bee785cac7f brick.cpp
--- a/brick.cpp	Wed Nov 21 19:43:34 2018 +0000
+++ b/brick.cpp	Wed Nov 21 21:52:41 2018 +0000
@@ -2,6 +2,8 @@
 #include "mbed.h"
 #include "piezas.h"
 #include "avenidas.h"
+#include "vehiculos.h"
+
 //#define DEBUG 1
 Serial pc(USBTX,USBRX);  
 SPI deviceM(PB_5, PB_4, PB_3);  // D4(gris), Ninguno, D3(azul)
@@ -25,6 +27,9 @@
 
 void calle_funtion();
 void tetris();
+void carros();
+void pantalla_pr();
+void himno_legria();
 
 // funciones de cruzando la calle
 
@@ -48,6 +53,16 @@
 void desplazar_der_tx();
 void aum_velocidad_tx();
 void perder_tx();
+//funciones carro
+
+void desplazar_izq();
+void desplazar_der();
+void selec_nivel();
+void desplazar();
+void selec();
+void juego();
+void printstatus();
+void aum_velocidad_cr();
 
 uint16_t* girar(uint16_t* pieza, int posicion);
 // Declaracion de variables  tetris
@@ -77,10 +92,21 @@
 uint8_t ubicacion;
 uint8_t conteo = 2;
 
+
+// Definicion de Variables carro
+
+uint16_t* fail;
+uint16_t* camino;
+uint8_t  enable_der=1;
+uint8_t  enable_izq=1;
+uint8_t  enable_abj=1;
+uint8_t  pos;
+uint8_t  posicion_fig=3;
+float velocidad_cr = 0.4;
+
 // Funciones pantalla principal
 
-void pantalla_pr();
-void himno_legria();
+
 
 void sendSPI(uint8_t d1, uint8_t d2)
 {
@@ -133,17 +159,20 @@
       else if(meas_vx > 1700)
          selec_p--;
          
-      if(selec_p > 2)
+      if(selec_p > 3)
          selec_p=0;
       else if (selec_p < 0)  
-         selec_p=2;
+         selec_p=3;
          
       if(selec_p == 0)
          global_disp = SELEC;
       else if (selec_p == 1)  
          global_disp = UNO;
-      else
-         global_disp = DOS;      
+      else if (selec_p == 2)
+         global_disp = DOS; 
+      else   
+         global_disp = TRES;     
+         
       wait(0.5);  
     /*  if(meas_vx < 1600)
          global_disp = DOS, selec_p=2;
@@ -159,8 +188,11 @@
           calle_funtion();
       else if (selec_p==2 && sel==1)    
           tetris();
-      else if (selec_p==0 && sel==1)
+      else if (selec_p==3 && sel==1)
+          carros();
+      else if (selec_p==3 && sel==1)    
           himno_legria();
+          
       }
       
 }
@@ -711,4 +743,126 @@
             wait(0.5*duracion2[i]);
         }    
     NVIC_SystemReset();
-}     
\ No newline at end of file
+}    
+
+
+// Funciones del carro
+
+void carros(){
+    
+     while(1){
+
+        selec();
+
+        }
+    
+    }
+void selec(){
+   
+   figura=rand()%4;
+   
+   switch(figura){ //Este switch escoje la figura con que trabajaar
+             case 0: // carro derecha
+             nivel = CR_DER;
+             break;
+             case 1: // carro izquierda       
+             nivel = CR_IZQ;
+             break;
+             case 2: // caja derecha
+             nivel = CJ_DER;
+             break;
+             case 3: // caja izquierda
+             nivel = CJ_IZQ;
+             break;
+             }
+       
+       juego();
+       
+   }  
+ 
+ 
+ void juego(){
+ 
+   jugador=MICARRO;
+   camino= CALLE;
+   fail=EQUIS;
+   //tp.attach(&printstatus,0.2);
+   enable_abj=1;
+   enable_der=1;
+   enable_izq=1;
+   // Declaracion de Variables de lectura del jostick
+   float meas_vx;
+   int i=0;
+ 
+while(enable_abj){
+
+    int j=1;  // inicia el contador j en 1 
+     
+    while(j<=8){ //se encarga de seleccionar que posicion del vector imprimira
+         
+         sendSPI(j, jugador[j-1]|(nivel[j-1]>>i)|camino[j-1]);  //Imprime el resultado de aplicar OR a la memoria y al desplamamiento de imprimir
+         //wait(0.1); // Activar este wait para pruebas de desplazamiento y captura de los datos
+ 
+     if(i==13){  //Detiene el desplazamiento cuando los bits tocan fondo, 
+         enable_abj=0;// desabilitador del ciclo while 
+         }  
+     if((jugador[j-1]&(nivel[j-1]>>i))!=0){
+         
+         NVIC_SystemReset();
+         
+         }  
+     j++;
+     } 
+     wait(velocidad_cr); // espera para tomar el otro valor de lectura
+     // ----------------------Lectura del jostick-----------------------------
+     
+     // Lectura de parametros del jostick
+     meas_vx = vrx.read() * 3300; // Convierte el valor de lectura de la entrada entre 0-3300 eje X
+
+    if (meas_vx < 1600 && enable_izq)
+           desplazar_izq(); 
+    else if (meas_vx > 1700 && enable_der)
+           desplazar_der();
+     i++;
+     pulsador_abj.fall(&aum_velocidad_cr);
+     }
+}
+     
+void desplazar_izq(){
+      
+      enable_der=1;
+      posicion_fig--;
+      
+      
+      if(posicion_fig==2)
+         enable_izq=0;
+      
+      
+      int izq = jugador[0];
+      for(int i= 0; i<8;i++){  
+          jugador[i]=jugador[i+1];
+          }
+      jugador[7] = izq; 
+    
+}
+
+void desplazar_der(){
+      
+      enable_izq=1;
+      posicion_fig++;
+      
+      if(posicion_fig==5)
+         enable_der=0;
+          
+      int der = jugador[7];
+      for(int i= 7; i>=0;i--){  
+          jugador[i]=jugador[i-1];
+          }
+      jugador[0] = der;
+      
+    }
+
+ void  aum_velocidad_cr(){
+     velocidad_cr=0.2;
+     } 
+ 
\ No newline at end of file