Yosef Guevara Salamanca
/
Brick_game_1
Selecciona los juegos
brick.cpp@0:6f394b1e3cf7, 2018-11-16 (annotated)
- Committer:
- djinn77
- Date:
- Fri Nov 16 08:02:21 2018 +0000
- Revision:
- 0:6f394b1e3cf7
- Child:
- 1:abc2af4246eb
Selector de juegos selecciona el juego calle
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
djinn77 | 0:6f394b1e3cf7 | 1 | |
djinn77 | 0:6f394b1e3cf7 | 2 | #include "mbed.h" |
djinn77 | 0:6f394b1e3cf7 | 3 | #include "piezas.h" |
djinn77 | 0:6f394b1e3cf7 | 4 | #include "avenidas.h" |
djinn77 | 0:6f394b1e3cf7 | 5 | Serial pc(USBTX,USBRX); |
djinn77 | 0:6f394b1e3cf7 | 6 | SPI deviceM(PB_5, PB_4, PB_3); // D4(gris), Ninguno, D3(azul) |
djinn77 | 0:6f394b1e3cf7 | 7 | DigitalOut ssel (PA_4); // A2(morado) |
djinn77 | 0:6f394b1e3cf7 | 8 | Ticker tp; |
djinn77 | 0:6f394b1e3cf7 | 9 | int printjugador =1; |
djinn77 | 0:6f394b1e3cf7 | 10 | |
djinn77 | 0:6f394b1e3cf7 | 11 | // Definiendo Botones |
djinn77 | 0:6f394b1e3cf7 | 12 | |
djinn77 | 0:6f394b1e3cf7 | 13 | AnalogIn vry(A3); // Lee el eje x del jostick |
djinn77 | 0:6f394b1e3cf7 | 14 | AnalogIn vrx(A4); // Lee el eje y del jostick |
djinn77 | 0:6f394b1e3cf7 | 15 | InterruptIn pulsador_abj(D8); // Lee el boton del jostick |
djinn77 | 0:6f394b1e3cf7 | 16 | DigitalIn sel(D7); |
djinn77 | 0:6f394b1e3cf7 | 17 | |
djinn77 | 0:6f394b1e3cf7 | 18 | |
djinn77 | 0:6f394b1e3cf7 | 19 | // Define numeros |
djinn77 | 0:6f394b1e3cf7 | 20 | uint16_t* global_disp={0}; |
djinn77 | 0:6f394b1e3cf7 | 21 | |
djinn77 | 0:6f394b1e3cf7 | 22 | |
djinn77 | 0:6f394b1e3cf7 | 23 | // Funciones de la pantalla principal |
djinn77 | 0:6f394b1e3cf7 | 24 | |
djinn77 | 0:6f394b1e3cf7 | 25 | void calle_funtion(); |
djinn77 | 0:6f394b1e3cf7 | 26 | |
djinn77 | 0:6f394b1e3cf7 | 27 | // funciones de cruzando la calle |
djinn77 | 0:6f394b1e3cf7 | 28 | |
djinn77 | 0:6f394b1e3cf7 | 29 | void printstatus_cll(); // Define el prototipo imprime el juego en pantalla |
djinn77 | 0:6f394b1e3cf7 | 30 | void desplazar_der_cll(); // Define el prototipo que desplaza el jugador a la der |
djinn77 | 0:6f394b1e3cf7 | 31 | void desplazar_izq_cll(); // Define el prototipo que desplaza el jugador a la izq |
djinn77 | 0:6f394b1e3cf7 | 32 | void arriba_cll(); // Define el prototipo que desplaza el jugador hacia arriba |
djinn77 | 0:6f394b1e3cf7 | 33 | void pista_cll(); // Define el prototipo |
djinn77 | 0:6f394b1e3cf7 | 34 | void puntaje_cll(); // Define el prototipo que cuenta el puntaje |
djinn77 | 0:6f394b1e3cf7 | 35 | void impresion(); // Define el prototipo |
djinn77 | 0:6f394b1e3cf7 | 36 | void aumentar_dificultad_cll(); // Define el prototipo que aumenta la velocidad de los vehiculos |
djinn77 | 0:6f394b1e3cf7 | 37 | void reiniciar_calle(); |
djinn77 | 0:6f394b1e3cf7 | 38 | |
djinn77 | 0:6f394b1e3cf7 | 39 | // Definicion de Variables de la calle |
djinn77 | 0:6f394b1e3cf7 | 40 | |
djinn77 | 0:6f394b1e3cf7 | 41 | uint16_t* nivel; |
djinn77 | 0:6f394b1e3cf7 | 42 | uint16_t* jugador; |
djinn77 | 0:6f394b1e3cf7 | 43 | uint16_t* victorias; |
djinn77 | 0:6f394b1e3cf7 | 44 | float velocidad = 1.0; |
djinn77 | 0:6f394b1e3cf7 | 45 | float meas_vx; |
djinn77 | 0:6f394b1e3cf7 | 46 | float meas_vy; |
djinn77 | 0:6f394b1e3cf7 | 47 | uint8_t ubicacion; |
djinn77 | 0:6f394b1e3cf7 | 48 | uint8_t conteo = 2; |
djinn77 | 0:6f394b1e3cf7 | 49 | |
djinn77 | 0:6f394b1e3cf7 | 50 | // Funciones pantalla principal |
djinn77 | 0:6f394b1e3cf7 | 51 | |
djinn77 | 0:6f394b1e3cf7 | 52 | void pantalla_pr(); |
djinn77 | 0:6f394b1e3cf7 | 53 | |
djinn77 | 0:6f394b1e3cf7 | 54 | void sendSPI(uint8_t d1, uint8_t d2) |
djinn77 | 0:6f394b1e3cf7 | 55 | { |
djinn77 | 0:6f394b1e3cf7 | 56 | deviceM.unlock(); |
djinn77 | 0:6f394b1e3cf7 | 57 | ssel=0; |
djinn77 | 0:6f394b1e3cf7 | 58 | deviceM.write(d1); |
djinn77 | 0:6f394b1e3cf7 | 59 | deviceM.write(d2); |
djinn77 | 0:6f394b1e3cf7 | 60 | ssel=1; |
djinn77 | 0:6f394b1e3cf7 | 61 | deviceM.lock(); |
djinn77 | 0:6f394b1e3cf7 | 62 | }; |
djinn77 | 0:6f394b1e3cf7 | 63 | |
djinn77 | 0:6f394b1e3cf7 | 64 | void inicializar_matriz(){ |
djinn77 | 0:6f394b1e3cf7 | 65 | sendSPI(0x0c,1); |
djinn77 | 0:6f394b1e3cf7 | 66 | sendSPI(0x0b,7); |
djinn77 | 0:6f394b1e3cf7 | 67 | sendSPI(0x09,0); //SELECCIONA LA LUMINOSIDAD DE LA MATRIZ |
djinn77 | 0:6f394b1e3cf7 | 68 | sendSPI(0x0A,0x00); //SELECCIONA LA LUMINOSIDAD DE LA MATRIZ |
djinn77 | 0:6f394b1e3cf7 | 69 | |
djinn77 | 0:6f394b1e3cf7 | 70 | int i; |
djinn77 | 0:6f394b1e3cf7 | 71 | for (i=0;i<2;i++){ |
djinn77 | 0:6f394b1e3cf7 | 72 | sendSPI(0x0F,1); |
djinn77 | 0:6f394b1e3cf7 | 73 | wait (0.5); |
djinn77 | 0:6f394b1e3cf7 | 74 | sendSPI(0x0F,0); |
djinn77 | 0:6f394b1e3cf7 | 75 | wait (0.5); |
djinn77 | 0:6f394b1e3cf7 | 76 | } |
djinn77 | 0:6f394b1e3cf7 | 77 | |
djinn77 | 0:6f394b1e3cf7 | 78 | } |
djinn77 | 0:6f394b1e3cf7 | 79 | |
djinn77 | 0:6f394b1e3cf7 | 80 | |
djinn77 | 0:6f394b1e3cf7 | 81 | |
djinn77 | 0:6f394b1e3cf7 | 82 | int main() { |
djinn77 | 0:6f394b1e3cf7 | 83 | |
djinn77 | 0:6f394b1e3cf7 | 84 | inicializar_matriz(); |
djinn77 | 0:6f394b1e3cf7 | 85 | pc.baud(38400); |
djinn77 | 0:6f394b1e3cf7 | 86 | |
djinn77 | 0:6f394b1e3cf7 | 87 | while(1){ |
djinn77 | 0:6f394b1e3cf7 | 88 | |
djinn77 | 0:6f394b1e3cf7 | 89 | int selec_p=0; |
djinn77 | 0:6f394b1e3cf7 | 90 | meas_vx = vrx.read() * 3300; // Convierte el valor de lectura de la entrada entre 0-3300 eje X |
djinn77 | 0:6f394b1e3cf7 | 91 | |
djinn77 | 0:6f394b1e3cf7 | 92 | if(meas_vx < 1600) |
djinn77 | 0:6f394b1e3cf7 | 93 | global_disp = DOS, selec_p=2; |
djinn77 | 0:6f394b1e3cf7 | 94 | else if (meas_vx < 1700) |
djinn77 | 0:6f394b1e3cf7 | 95 | global_disp = SELEC, selec_p=0; |
djinn77 | 0:6f394b1e3cf7 | 96 | else |
djinn77 | 0:6f394b1e3cf7 | 97 | global_disp = UNO, selec_p=1; |
djinn77 | 0:6f394b1e3cf7 | 98 | |
djinn77 | 0:6f394b1e3cf7 | 99 | pantalla_pr(); |
djinn77 | 0:6f394b1e3cf7 | 100 | |
djinn77 | 0:6f394b1e3cf7 | 101 | if (selec_p==1 && sel==1) |
djinn77 | 0:6f394b1e3cf7 | 102 | calle_funtion(); |
djinn77 | 0:6f394b1e3cf7 | 103 | |
djinn77 | 0:6f394b1e3cf7 | 104 | |
djinn77 | 0:6f394b1e3cf7 | 105 | |
djinn77 | 0:6f394b1e3cf7 | 106 | } |
djinn77 | 0:6f394b1e3cf7 | 107 | |
djinn77 | 0:6f394b1e3cf7 | 108 | } |
djinn77 | 0:6f394b1e3cf7 | 109 | |
djinn77 | 0:6f394b1e3cf7 | 110 | |
djinn77 | 0:6f394b1e3cf7 | 111 | |
djinn77 | 0:6f394b1e3cf7 | 112 | void pantalla_pr(){ |
djinn77 | 0:6f394b1e3cf7 | 113 | for(int i= 1;i<=8;i++){ |
djinn77 | 0:6f394b1e3cf7 | 114 | sendSPI(i, global_disp[i-1]); |
djinn77 | 0:6f394b1e3cf7 | 115 | } |
djinn77 | 0:6f394b1e3cf7 | 116 | } |
djinn77 | 0:6f394b1e3cf7 | 117 | |
djinn77 | 0:6f394b1e3cf7 | 118 | void calle_funtion(){ |
djinn77 | 0:6f394b1e3cf7 | 119 | |
djinn77 | 0:6f394b1e3cf7 | 120 | while(1){ |
djinn77 | 0:6f394b1e3cf7 | 121 | |
djinn77 | 0:6f394b1e3cf7 | 122 | nivel= AV_1; // Asigna el trasado de las calles al juego |
djinn77 | 0:6f394b1e3cf7 | 123 | victorias=puntos; // Asigna los puntos acumulados en la pantalla inicia en 0 |
djinn77 | 0:6f394b1e3cf7 | 124 | jugador=player; // Asigna la forma del jugador |
djinn77 | 0:6f394b1e3cf7 | 125 | tp.attach(&printstatus_cll,0.2); // MIRAR para que sirve |
djinn77 | 0:6f394b1e3cf7 | 126 | ubicacion=1; // Inicializa la varibale que cuenta la posicion del jugador |
djinn77 | 0:6f394b1e3cf7 | 127 | |
djinn77 | 0:6f394b1e3cf7 | 128 | |
djinn77 | 0:6f394b1e3cf7 | 129 | |
djinn77 | 0:6f394b1e3cf7 | 130 | while(1){ |
djinn77 | 0:6f394b1e3cf7 | 131 | |
djinn77 | 0:6f394b1e3cf7 | 132 | meas_vx = vrx.read() * 3300; // Convierte el valor de lectura de la entrada entre 0-3300 eje X |
djinn77 | 0:6f394b1e3cf7 | 133 | meas_vy = vry.read() * 3300; // Convierte el valor de lectura de la entrada entre 0-3300 eje Y |
djinn77 | 0:6f394b1e3cf7 | 134 | |
djinn77 | 0:6f394b1e3cf7 | 135 | //------ realiza el corriemiento del vector hacia la izq y der respectivamente. |
djinn77 | 0:6f394b1e3cf7 | 136 | |
djinn77 | 0:6f394b1e3cf7 | 137 | if (meas_vx < 1600) // si se cumple esta condicion el jugador se desplaza a la izq |
djinn77 | 0:6f394b1e3cf7 | 138 | desplazar_izq_cll(); |
djinn77 | 0:6f394b1e3cf7 | 139 | else if (meas_vx > 1700) // si se cumple esta condicion el jugador se desplaza a la der |
djinn77 | 0:6f394b1e3cf7 | 140 | desplazar_der_cll(); |
djinn77 | 0:6f394b1e3cf7 | 141 | |
djinn77 | 0:6f394b1e3cf7 | 142 | //------ mueve a el jugador hacia arriba en el mapa |
djinn77 | 0:6f394b1e3cf7 | 143 | |
djinn77 | 0:6f394b1e3cf7 | 144 | if(meas_vy < 1550){ |
djinn77 | 0:6f394b1e3cf7 | 145 | arriba_cll(); // hace el llamado a la funcion que mueve al jugador a la parte superior |
djinn77 | 0:6f394b1e3cf7 | 146 | ubicacion++; // cada vez que se ejecuta actualiza la posicion del jugador en el mapa |
djinn77 | 0:6f394b1e3cf7 | 147 | pc.printf("\n ubicacion:\n %i",ubicacion); // imprime la ubicacion del jugador en el puerto serial |
djinn77 | 0:6f394b1e3cf7 | 148 | if(ubicacion==7) // si la posicion del jugador es igual a 7 ejecuta la funcion puntaje_cll(); |
djinn77 | 0:6f394b1e3cf7 | 149 | puntaje_cll(); |
djinn77 | 0:6f394b1e3cf7 | 150 | } |
djinn77 | 0:6f394b1e3cf7 | 151 | |
djinn77 | 0:6f394b1e3cf7 | 152 | // ----- El siguiente ciclo realiza el desplazamiento de los vehiculos |
djinn77 | 0:6f394b1e3cf7 | 153 | pista_cll(); |
djinn77 | 0:6f394b1e3cf7 | 154 | |
djinn77 | 0:6f394b1e3cf7 | 155 | wait(velocidad); // Velocidad del juego |
djinn77 | 0:6f394b1e3cf7 | 156 | |
djinn77 | 0:6f394b1e3cf7 | 157 | } |
djinn77 | 0:6f394b1e3cf7 | 158 | |
djinn77 | 0:6f394b1e3cf7 | 159 | |
djinn77 | 0:6f394b1e3cf7 | 160 | |
djinn77 | 0:6f394b1e3cf7 | 161 | |
djinn77 | 0:6f394b1e3cf7 | 162 | } |
djinn77 | 0:6f394b1e3cf7 | 163 | |
djinn77 | 0:6f394b1e3cf7 | 164 | |
djinn77 | 0:6f394b1e3cf7 | 165 | |
djinn77 | 0:6f394b1e3cf7 | 166 | } |
djinn77 | 0:6f394b1e3cf7 | 167 | |
djinn77 | 0:6f394b1e3cf7 | 168 | void desplazar_der_cll(){ // Esta funcion desplaza al jugador hacia la derecha |
djinn77 | 0:6f394b1e3cf7 | 169 | |
djinn77 | 0:6f394b1e3cf7 | 170 | int der = jugador[7]; |
djinn77 | 0:6f394b1e3cf7 | 171 | for(int i= 7; i>=0;i--){ |
djinn77 | 0:6f394b1e3cf7 | 172 | jugador[i]=jugador[i-1]; |
djinn77 | 0:6f394b1e3cf7 | 173 | } |
djinn77 | 0:6f394b1e3cf7 | 174 | jugador[0] = der; |
djinn77 | 0:6f394b1e3cf7 | 175 | |
djinn77 | 0:6f394b1e3cf7 | 176 | } |
djinn77 | 0:6f394b1e3cf7 | 177 | |
djinn77 | 0:6f394b1e3cf7 | 178 | void desplazar_izq_cll(){ // Esta funcion desplaza al jugador hacia la izq |
djinn77 | 0:6f394b1e3cf7 | 179 | |
djinn77 | 0:6f394b1e3cf7 | 180 | int izq = jugador[0]; |
djinn77 | 0:6f394b1e3cf7 | 181 | for(int i= 0; i<8;i++){ |
djinn77 | 0:6f394b1e3cf7 | 182 | jugador[i]=jugador[i+1]; |
djinn77 | 0:6f394b1e3cf7 | 183 | } |
djinn77 | 0:6f394b1e3cf7 | 184 | jugador[7] = izq; |
djinn77 | 0:6f394b1e3cf7 | 185 | |
djinn77 | 0:6f394b1e3cf7 | 186 | } |
djinn77 | 0:6f394b1e3cf7 | 187 | |
djinn77 | 0:6f394b1e3cf7 | 188 | void arriba_cll(){ // Esta funcion desplaza al jugador hacia arriba |
djinn77 | 0:6f394b1e3cf7 | 189 | |
djinn77 | 0:6f394b1e3cf7 | 190 | int arb = 1; |
djinn77 | 0:6f394b1e3cf7 | 191 | for(int i= 0; i<8;i++){ |
djinn77 | 0:6f394b1e3cf7 | 192 | jugador[i]= jugador[i] << arb; |
djinn77 | 0:6f394b1e3cf7 | 193 | } |
djinn77 | 0:6f394b1e3cf7 | 194 | arb++; |
djinn77 | 0:6f394b1e3cf7 | 195 | |
djinn77 | 0:6f394b1e3cf7 | 196 | } |
djinn77 | 0:6f394b1e3cf7 | 197 | |
djinn77 | 0:6f394b1e3cf7 | 198 | void pista_cll(){ // Esta funcion ejecuta el movimiento de los vehiculos |
djinn77 | 0:6f394b1e3cf7 | 199 | |
djinn77 | 0:6f394b1e3cf7 | 200 | int aux = nivel[0]; |
djinn77 | 0:6f394b1e3cf7 | 201 | for(int i= 0; i<8;i++){ |
djinn77 | 0:6f394b1e3cf7 | 202 | nivel[i]=nivel[i+1]; |
djinn77 | 0:6f394b1e3cf7 | 203 | } |
djinn77 | 0:6f394b1e3cf7 | 204 | nivel[7] = aux; |
djinn77 | 0:6f394b1e3cf7 | 205 | |
djinn77 | 0:6f394b1e3cf7 | 206 | } |
djinn77 | 0:6f394b1e3cf7 | 207 | |
djinn77 | 0:6f394b1e3cf7 | 208 | void puntaje_cll(){ // Esta funcion hace el conteo de los puntos ganados |
djinn77 | 0:6f394b1e3cf7 | 209 | |
djinn77 | 0:6f394b1e3cf7 | 210 | victorias[conteo]=0x80; // cada vez que se llega al otro lado de la calle suma 1 punto que se visualiza en pantalla |
djinn77 | 0:6f394b1e3cf7 | 211 | for(int i= 0; i<8;i++){ // Este ciclo for regresa al jugador a la pos 1 |
djinn77 | 0:6f394b1e3cf7 | 212 | jugador[i]= jugador[i] >> 6; |
djinn77 | 0:6f394b1e3cf7 | 213 | } |
djinn77 | 0:6f394b1e3cf7 | 214 | ubicacion=1; // Renicializa la pos del jugador |
djinn77 | 0:6f394b1e3cf7 | 215 | conteo++; // Cuenta cuantas veces a llegado el jugador al otro lado hasta un maximo de 4 |
djinn77 | 0:6f394b1e3cf7 | 216 | if(conteo == 6){ // cuando el conteo es igual a 6 se llama a la funcion aumentar dificultad |
djinn77 | 0:6f394b1e3cf7 | 217 | aumentar_dificultad_cll(); |
djinn77 | 0:6f394b1e3cf7 | 218 | } |
djinn77 | 0:6f394b1e3cf7 | 219 | |
djinn77 | 0:6f394b1e3cf7 | 220 | |
djinn77 | 0:6f394b1e3cf7 | 221 | } |
djinn77 | 0:6f394b1e3cf7 | 222 | |
djinn77 | 0:6f394b1e3cf7 | 223 | void aumentar_dificultad_cll(){ // Esta funcion aumenta la dificultad del juego |
djinn77 | 0:6f394b1e3cf7 | 224 | |
djinn77 | 0:6f394b1e3cf7 | 225 | for(int i= 0; i<8;i++){ // Regresa el valor de las victorias acumuladas a 0 |
djinn77 | 0:6f394b1e3cf7 | 226 | victorias[i]= 0; |
djinn77 | 0:6f394b1e3cf7 | 227 | } |
djinn77 | 0:6f394b1e3cf7 | 228 | velocidad = velocidad - 0.1; // aumenta la velocidad del juego |
djinn77 | 0:6f394b1e3cf7 | 229 | conteo=2; // reinicializa el conteo |
djinn77 | 0:6f394b1e3cf7 | 230 | |
djinn77 | 0:6f394b1e3cf7 | 231 | |
djinn77 | 0:6f394b1e3cf7 | 232 | } |
djinn77 | 0:6f394b1e3cf7 | 233 | void reiniciar_calle(){ // Esta condicion renicia el sistema al estrellarce con un vehiculo |
djinn77 | 0:6f394b1e3cf7 | 234 | |
djinn77 | 0:6f394b1e3cf7 | 235 | NVIC_SystemReset(); |
djinn77 | 0:6f394b1e3cf7 | 236 | |
djinn77 | 0:6f394b1e3cf7 | 237 | } |
djinn77 | 0:6f394b1e3cf7 | 238 | void printstatus_cll() // Esta funcion es la encargada de la impresion |
djinn77 | 0:6f394b1e3cf7 | 239 | { |
djinn77 | 0:6f394b1e3cf7 | 240 | |
djinn77 | 0:6f394b1e3cf7 | 241 | for(int j= 1; j<=8;j++) // Este cilo imprime en pantalla |
djinn77 | 0:6f394b1e3cf7 | 242 | if (printjugador){ |
djinn77 | 0:6f394b1e3cf7 | 243 | 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 |
djinn77 | 0:6f394b1e3cf7 | 244 | if((nivel[j-1] & jugador[j-1]) != 0){ // SI este if se cumple el jugador ha sido chocado |
djinn77 | 0:6f394b1e3cf7 | 245 | reiniciar_calle(); // Ee se hace llamado a la funcion reinicio |
djinn77 | 0:6f394b1e3cf7 | 246 | } |
djinn77 | 0:6f394b1e3cf7 | 247 | |
djinn77 | 0:6f394b1e3cf7 | 248 | }else{ |
djinn77 | 0:6f394b1e3cf7 | 249 | sendSPI(j, nivel[j-1]| victorias[j-1]); |
djinn77 | 0:6f394b1e3cf7 | 250 | } |
djinn77 | 0:6f394b1e3cf7 | 251 | |
djinn77 | 0:6f394b1e3cf7 | 252 | printjugador =!printjugador; |
djinn77 | 0:6f394b1e3cf7 | 253 | } |