Yosef Guevara Salamanca
/
Brick_game_1
Selecciona los juegos
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; }