Selecciona los juegos

Dependencies:   mbed

brick.cpp

Committer:
djinn77
Date:
2018-11-16
Revision:
0:6f394b1e3cf7
Child:
1:abc2af4246eb

File content as of revision 0:6f394b1e3cf7:


#include "mbed.h"
#include "piezas.h"
#include "avenidas.h"
Serial pc(USBTX,USBRX);  
SPI deviceM(PB_5, PB_4, PB_3);  // D4(gris), Ninguno, D3(azul)
DigitalOut ssel (PA_4);         // A2(morado)
Ticker tp;
int printjugador =1;  

// Definiendo Botones
 
AnalogIn vry(A3);               // Lee el eje x del jostick
AnalogIn vrx(A4);               // Lee el eje y del jostick
InterruptIn pulsador_abj(D8);               // Lee el boton del jostick
DigitalIn sel(D7);


// Define numeros
uint16_t* global_disp={0};


// Funciones de la pantalla principal

void calle_funtion();

// funciones de cruzando la calle

void printstatus_cll();             // Define el prototipo imprime el juego en pantalla
void desplazar_der_cll();          // Define el prototipo que desplaza el jugador a la der 
void desplazar_izq_cll();           // Define el prototipo que desplaza el jugador a la izq
void arriba_cll();                  // Define el prototipo que desplaza el jugador hacia arriba
void pista_cll();                   // Define el prototipo 
void puntaje_cll();                 // Define el prototipo que cuenta el puntaje
void impresion();               // Define el prototipo 
void aumentar_dificultad_cll();     // Define el prototipo  que aumenta la velocidad de los vehiculos
void reiniciar_calle();

// Definicion de Variables de la calle
 
uint16_t* nivel;
uint16_t* jugador;
uint16_t* victorias;
float velocidad = 1.0;
float meas_vx;
float meas_vy; 
uint8_t ubicacion;
uint8_t conteo = 2;

// Funciones pantalla principal

void pantalla_pr();

void sendSPI(uint8_t d1, uint8_t d2)
{
    deviceM.unlock();
    ssel=0;
    deviceM.write(d1); 
    deviceM.write(d2);  
    ssel=1;
    deviceM.lock();
};
 
void inicializar_matriz(){
    sendSPI(0x0c,1);    
    sendSPI(0x0b,7);
    sendSPI(0x09,0);    //SELECCIONA LA LUMINOSIDAD DE LA MATRIZ
    sendSPI(0x0A,0x00); //SELECCIONA LA LUMINOSIDAD DE LA MATRIZ
    
    int i;
    for (i=0;i<2;i++){
        sendSPI(0x0F,1);
        wait (0.5);
        sendSPI(0x0F,0);
        wait (0.5);
    }
  
  }


  
int main() {
                   
   inicializar_matriz();
   pc.baud(38400);
   
   while(1){
      
      int selec_p=0;
      meas_vx = vrx.read() * 3300; // Convierte el valor de lectura de la entrada entre 0-3300 eje X
      
      if(meas_vx < 1600)
         global_disp = DOS, selec_p=2;
      else if (meas_vx < 1700)  
         global_disp = SELEC, selec_p=0;
      else
         global_disp = UNO, selec_p=1;
      
      pantalla_pr();
      
      if (selec_p==1 && sel==1)
          calle_funtion();
          

      
      }
      
}



void pantalla_pr(){      
          for(int i= 1;i<=8;i++){
          sendSPI(i, global_disp[i-1]);
          }
    }

void calle_funtion(){
    
    while(1){
        
   nivel= AV_1;                    // Asigna el trasado de las calles al juego
   victorias=puntos;               // Asigna los puntos acumulados en la pantalla inicia en 0
   jugador=player;                 // Asigna la forma del jugador
   tp.attach(&printstatus_cll,0.2);    // MIRAR para que sirve
   ubicacion=1;                    // Inicializa la varibale que cuenta la posicion del jugador
   

       
   while(1){
       
   meas_vx = vrx.read() * 3300; // Convierte el valor de lectura de la entrada entre 0-3300 eje X
   meas_vy = vry.read() * 3300; // Convierte el valor de lectura de la entrada entre 0-3300 eje Y
   
//------ realiza el corriemiento del vector hacia la izq y der respectivamente.

  if (meas_vx < 1600)           // si se cumple esta condicion el jugador se desplaza a la izq
      desplazar_izq_cll(); 
  else if (meas_vx > 1700)      // si se cumple esta condicion el jugador se desplaza a la der
      desplazar_der_cll();
 
//------ mueve a el jugador hacia arriba en el mapa
    
  if(meas_vy < 1550){   
     arriba_cll();                  // hace el llamado a la funcion que mueve al jugador a la parte superior
     ubicacion++;               // cada vez que se ejecuta actualiza la posicion del jugador en el mapa
     pc.printf("\n ubicacion:\n %i",ubicacion);  // imprime la ubicacion del jugador en el puerto serial
     if(ubicacion==7)           // si la posicion del jugador es igual a 7 ejecuta la funcion puntaje_cll();
        puntaje_cll();         
     }
     
// ----- El siguiente ciclo realiza el desplazamiento de los vehiculos
  pista_cll(); 
  
  wait(velocidad); // Velocidad del juego
               
       }
        
        
        
        
        }
    
    
    
    }
    
 void desplazar_der_cll(){               // Esta funcion desplaza al jugador hacia la derecha
      
      int der = jugador[7];    
      for(int i= 7; i>=0;i--){  
          jugador[i]=jugador[i-1];
          }
      jugador[0] = der;

    }

void desplazar_izq_cll(){               // Esta funcion desplaza al jugador hacia la izq
   
      int izq = jugador[0];
      for(int i= 0; i<8;i++){  
          jugador[i]=jugador[i+1];
          }
      jugador[7] = izq;

 }
 
void arriba_cll(){                      // Esta funcion desplaza al jugador hacia arriba
      
      int arb = 1;
      for(int i= 0; i<8;i++){  
          jugador[i]= jugador[i] << arb;
          }
      arb++;
      
    }
    
void pista_cll(){                       // Esta funcion ejecuta el movimiento de los vehiculos
    
    int aux = nivel[0];
      for(int i= 0; i<8;i++){  
          nivel[i]=nivel[i+1];
          }
      nivel[7] = aux;
    
    }  
    
void puntaje_cll(){                     // Esta funcion hace el conteo de los puntos ganados
      
      victorias[conteo]=0x80;       // cada vez que se llega al otro lado de la calle suma 1 punto que se visualiza en pantalla
      for(int i= 0; i<8;i++){       // Este ciclo for regresa al jugador a la pos 1
          jugador[i]= jugador[i] >> 6;  
          }
      ubicacion=1;                  // Renicializa la pos del jugador
      conteo++;                     // Cuenta cuantas veces a llegado el jugador al otro lado  hasta un maximo de 4
      if(conteo == 6){              // cuando el conteo es igual a 6 se llama a la funcion aumentar dificultad
         aumentar_dificultad_cll();
         }
         
    
      } 

void aumentar_dificultad_cll(){          // Esta funcion aumenta la dificultad del juego       
      
      for(int i= 0; i<8;i++){        // Regresa el valor de las victorias acumuladas a 0
          victorias[i]= 0;
          }
      velocidad = velocidad - 0.1;   // aumenta la velocidad del juego
      conteo=2;                      // reinicializa el conteo
       
      
      }
void reiniciar_calle(){             // Esta condicion renicia el sistema al estrellarce con un vehiculo
    
    NVIC_SystemReset();
    
    }    
void printstatus_cll()                  // Esta funcion es la encargada de la impresion
{
    
    for(int j= 1; j<=8;j++)         // Este cilo imprime en pantalla
        if (printjugador){
            sendSPI(j, nivel[j-1]|jugador[j-1]| victorias[j-1]);   // CADA VEZ que se vea en pantalla SPI se mostrar un dato en pantalla
            if((nivel[j-1] & jugador[j-1]) != 0){                  // SI este if se cumple el jugador ha sido chocado
               reiniciar_calle();                                  // Ee se hace llamado a la funcion reinicio
               }
               
            }else{
                sendSPI(j, nivel[j-1]| victorias[j-1]);            
                }
             
    printjugador =!printjugador;
}