Selecciona los juegos

Dependencies:   mbed

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?

UserRevisionLine numberNew 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 }