Yosef Guevara Salamanca
/
Brick_game_1
Selecciona los juegos
Diff: brick.cpp
- Revision:
- 0:6f394b1e3cf7
- Child:
- 1:abc2af4246eb
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/brick.cpp Fri Nov 16 08:02:21 2018 +0000 @@ -0,0 +1,253 @@ + +#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; +} \ No newline at end of file