Tetris funcionando al 80%

Dependencies:   mbed

Committer:
Mateom0104
Date:
Thu Oct 18 03:18:22 2018 +0000
Revision:
0:1006a6a7855b
Child:
1:b327db3eb9ce
Tetris AWD

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Mateom0104 0:1006a6a7855b 1 #include "mbed.h"
Mateom0104 0:1006a6a7855b 2 #include "datos.h"
Mateom0104 0:1006a6a7855b 3
Mateom0104 0:1006a6a7855b 4
Mateom0104 0:1006a6a7855b 5 Serial pc(SERIAL_TX, SERIAL_RX);
Mateom0104 0:1006a6a7855b 6 SPI deviceM(PA_7, PA_6, PA_5);
Mateom0104 0:1006a6a7855b 7 DigitalOut ssel (PA_4);
Mateom0104 0:1006a6a7855b 8 void Rx_interrupt();
Mateom0104 0:1006a6a7855b 9
Mateom0104 0:1006a6a7855b 10 #define uint8_t unsigned char
Mateom0104 0:1006a6a7855b 11 uint8_t screen[8]={0,0,0,0,0,0,0,0};
Mateom0104 0:1006a6a7855b 12 uint8_t screen2[8]={0,0,0,0,0,0,0,0};
Mateom0104 0:1006a6a7855b 13 uint8_t verifica;
Mateom0104 0:1006a6a7855b 14 uint8_t mascara;
Mateom0104 0:1006a6a7855b 15 int velocidad=1000;
Mateom0104 0:1006a6a7855b 16 int segundo=1;
Mateom0104 0:1006a6a7855b 17 int verificacion=0;
Mateom0104 0:1006a6a7855b 18
Mateom0104 0:1006a6a7855b 19
Mateom0104 0:1006a6a7855b 20 #include "Movimiento.h"
Mateom0104 0:1006a6a7855b 21 ///////////////////////////////////////////////////////////////////////////////
Mateom0104 0:1006a6a7855b 22 void sendSPI(uint8_t d1, uint8_t d2)// envio de datos al max
Mateom0104 0:1006a6a7855b 23 {
Mateom0104 0:1006a6a7855b 24 deviceM.unlock();
Mateom0104 0:1006a6a7855b 25 ssel=0;
Mateom0104 0:1006a6a7855b 26 deviceM.write(d1);
Mateom0104 0:1006a6a7855b 27 deviceM.write(d2);
Mateom0104 0:1006a6a7855b 28 ssel=1;
Mateom0104 0:1006a6a7855b 29 deviceM.lock();
Mateom0104 0:1006a6a7855b 30 };
Mateom0104 0:1006a6a7855b 31 ///////////////////////////////////////////////////////////////////////////////
Mateom0104 0:1006a6a7855b 32 void borrar() // Borrar todos los datos de la matriz
Mateom0104 0:1006a6a7855b 33 {
Mateom0104 0:1006a6a7855b 34 int j;
Mateom0104 0:1006a6a7855b 35 for(j=1;j<9;j++)
Mateom0104 0:1006a6a7855b 36 {
Mateom0104 0:1006a6a7855b 37 sendSPI(j,0);
Mateom0104 0:1006a6a7855b 38 wait_ms(1);
Mateom0104 0:1006a6a7855b 39 }
Mateom0104 0:1006a6a7855b 40 }
Mateom0104 0:1006a6a7855b 41 ///////////////////////////////////////////////////////////////////////////////
Mateom0104 0:1006a6a7855b 42 void enviar() // Encargado de enviar la matriz completa
Mateom0104 0:1006a6a7855b 43 {
Mateom0104 0:1006a6a7855b 44 int i;
Mateom0104 0:1006a6a7855b 45
Mateom0104 0:1006a6a7855b 46 for(i=0;i<8;i++)
Mateom0104 0:1006a6a7855b 47 {
Mateom0104 0:1006a6a7855b 48 sendSPI(i+1,screen[i]);
Mateom0104 0:1006a6a7855b 49 }
Mateom0104 0:1006a6a7855b 50 }
Mateom0104 0:1006a6a7855b 51 ///////////////////////////////////////////////////////////////////////////////
Mateom0104 0:1006a6a7855b 52 void ver() // Informe de datos "no se usa "
Mateom0104 0:1006a6a7855b 53 {
Mateom0104 0:1006a6a7855b 54 int i;
Mateom0104 0:1006a6a7855b 55 for(i=0;i<8;i++)
Mateom0104 0:1006a6a7855b 56 {
Mateom0104 0:1006a6a7855b 57 pc.printf("posicion %d ",i);
Mateom0104 0:1006a6a7855b 58 pc.printf("= %d \n",screen[i]);
Mateom0104 0:1006a6a7855b 59 }
Mateom0104 0:1006a6a7855b 60 }
Mateom0104 0:1006a6a7855b 61 ///////////////////////////////////////////////////////////////////////////////
Mateom0104 0:1006a6a7855b 62 void escribir() // Guarda y compara los datos entrantes a la matriz y los que ya estaban
Mateom0104 0:1006a6a7855b 63 {
Mateom0104 0:1006a6a7855b 64 int i;
Mateom0104 0:1006a6a7855b 65
Mateom0104 0:1006a6a7855b 66 for(i=0;i<tamano;i++)
Mateom0104 0:1006a6a7855b 67 {
Mateom0104 0:1006a6a7855b 68 screen2[posicion-i]=(start[posicion-i] & 128);
Mateom0104 0:1006a6a7855b 69 start[posicion-i]=start[posicion-i] << 1;
Mateom0104 0:1006a6a7855b 70 }
Mateom0104 0:1006a6a7855b 71
Mateom0104 0:1006a6a7855b 72 //pc.printf("1 \n");
Mateom0104 0:1006a6a7855b 73 //ver();
Mateom0104 0:1006a6a7855b 74
Mateom0104 0:1006a6a7855b 75
Mateom0104 0:1006a6a7855b 76 for(i=0;i<tamano;i++)
Mateom0104 0:1006a6a7855b 77 {
Mateom0104 0:1006a6a7855b 78 screen[posicion-i]=((((screen[posicion-i]>>1) & ~(mascara-1)) | (screen[posicion-i] & (mascara-1))) | screen2[posicion-i] ) | (screen[posicion-i] & mascara) | (screen[posicion-i] & mascara*segundo);
Mateom0104 0:1006a6a7855b 79 }
Mateom0104 0:1006a6a7855b 80
Mateom0104 0:1006a6a7855b 81 //pc.printf("2 \n");
Mateom0104 0:1006a6a7855b 82 //ver();
Mateom0104 0:1006a6a7855b 83 enviar();
Mateom0104 0:1006a6a7855b 84 }
Mateom0104 0:1006a6a7855b 85 ///////////////////////////////////////////////////////////////////////////////
Mateom0104 0:1006a6a7855b 86 int ubicacion() //Limita el ingreso de posicion no mayor a 7
Mateom0104 0:1006a6a7855b 87 {
Mateom0104 0:1006a6a7855b 88 int a;
Mateom0104 0:1006a6a7855b 89 if((posicion_original+tamano) <= 8 && (posicion_original+tamano) >= 0 )
Mateom0104 0:1006a6a7855b 90 {
Mateom0104 0:1006a6a7855b 91 a=1;
Mateom0104 0:1006a6a7855b 92 }
Mateom0104 0:1006a6a7855b 93 else
Mateom0104 0:1006a6a7855b 94 {
Mateom0104 0:1006a6a7855b 95 //pc.printf("Error de posicion \n");
Mateom0104 0:1006a6a7855b 96 //pc.printf("Posicion original %d \n",posicion_original);
Mateom0104 0:1006a6a7855b 97 //pc.printf("tamano %d \n",tamano);
Mateom0104 0:1006a6a7855b 98 a=0;
Mateom0104 0:1006a6a7855b 99 }
Mateom0104 0:1006a6a7855b 100 return a;
Mateom0104 0:1006a6a7855b 101 }
Mateom0104 0:1006a6a7855b 102 ///////////////////////////////////////////////////////////////////////////////
Mateom0104 0:1006a6a7855b 103 void analisis() // Verifica la siguiente fila para saber si se puede desplazar
Mateom0104 0:1006a6a7855b 104 {
Mateom0104 0:1006a6a7855b 105 int i;
Mateom0104 0:1006a6a7855b 106 uint8_t a;
Mateom0104 0:1006a6a7855b 107
Mateom0104 0:1006a6a7855b 108 for(i=0;i<tamano;i++)
Mateom0104 0:1006a6a7855b 109 {
Mateom0104 0:1006a6a7855b 110 a=screen[posicion-i] & mascara;
Mateom0104 0:1006a6a7855b 111 // pc.printf("verificacion siguiente fila = %d \n ",a);
Mateom0104 0:1006a6a7855b 112 if(mascara==a)
Mateom0104 0:1006a6a7855b 113 {
Mateom0104 0:1006a6a7855b 114 i=tamano;
Mateom0104 0:1006a6a7855b 115 verifica=1;
Mateom0104 0:1006a6a7855b 116 }
Mateom0104 0:1006a6a7855b 117 else
Mateom0104 0:1006a6a7855b 118 {
Mateom0104 0:1006a6a7855b 119 verifica=0;
Mateom0104 0:1006a6a7855b 120 }
Mateom0104 0:1006a6a7855b 121 }
Mateom0104 0:1006a6a7855b 122 }
Mateom0104 0:1006a6a7855b 123 ////////////////////////////////////////////////////////////////////////////////
Mateom0104 0:1006a6a7855b 124 void analisis2() // Prueba
Mateom0104 0:1006a6a7855b 125 {
Mateom0104 0:1006a6a7855b 126 int i;
Mateom0104 0:1006a6a7855b 127 uint8_t a;
Mateom0104 0:1006a6a7855b 128
Mateom0104 0:1006a6a7855b 129 for(i=0;i<tamano;i++)
Mateom0104 0:1006a6a7855b 130 {
Mateom0104 0:1006a6a7855b 131 a=screen[posicion-i] & mascara;
Mateom0104 0:1006a6a7855b 132 a= a & ((screen[posicion-i]>>1) & ~(mascara - 1));
Mateom0104 0:1006a6a7855b 133 //pc.printf("verificacion siguiente fila = %d \n ",a);
Mateom0104 0:1006a6a7855b 134 if(a!=0)
Mateom0104 0:1006a6a7855b 135 {
Mateom0104 0:1006a6a7855b 136 i=tamano;
Mateom0104 0:1006a6a7855b 137 verifica=1;
Mateom0104 0:1006a6a7855b 138 segundo=1;
Mateom0104 0:1006a6a7855b 139 if(verificar2==1)
Mateom0104 0:1006a6a7855b 140 {
Mateom0104 0:1006a6a7855b 141 verificar2=0;
Mateom0104 0:1006a6a7855b 142 verifica=0;
Mateom0104 0:1006a6a7855b 143 segundo=2;
Mateom0104 0:1006a6a7855b 144 }
Mateom0104 0:1006a6a7855b 145 }
Mateom0104 0:1006a6a7855b 146 else
Mateom0104 0:1006a6a7855b 147 {
Mateom0104 0:1006a6a7855b 148 segundo=1;
Mateom0104 0:1006a6a7855b 149 verifica=0;
Mateom0104 0:1006a6a7855b 150 }
Mateom0104 0:1006a6a7855b 151 }
Mateom0104 0:1006a6a7855b 152
Mateom0104 0:1006a6a7855b 153 }
Mateom0104 0:1006a6a7855b 154 ///////////////////////////////////////////////////////////////////////////////
Mateom0104 0:1006a6a7855b 155 void play () // Funcion encargada de determianr el estado de la mascara
Mateom0104 0:1006a6a7855b 156 {
Mateom0104 0:1006a6a7855b 157 int a=1;
Mateom0104 0:1006a6a7855b 158 mascara=128;
Mateom0104 0:1006a6a7855b 159 //pc.printf("Posicion original 1 %d \n",posicion_original);
Mateom0104 0:1006a6a7855b 160 a=ubicacion();
Mateom0104 0:1006a6a7855b 161 while(a==1)
Mateom0104 0:1006a6a7855b 162 {
Mateom0104 0:1006a6a7855b 163 analisis2();
Mateom0104 0:1006a6a7855b 164
Mateom0104 0:1006a6a7855b 165 if(verificacion==1)
Mateom0104 0:1006a6a7855b 166 {
Mateom0104 0:1006a6a7855b 167 return;
Mateom0104 0:1006a6a7855b 168 }
Mateom0104 0:1006a6a7855b 169
Mateom0104 0:1006a6a7855b 170
Mateom0104 0:1006a6a7855b 171 if (verifica==1 || mascara==0)
Mateom0104 0:1006a6a7855b 172 {
Mateom0104 0:1006a6a7855b 173 a=0;
Mateom0104 0:1006a6a7855b 174
Mateom0104 0:1006a6a7855b 175 }
Mateom0104 0:1006a6a7855b 176 else
Mateom0104 0:1006a6a7855b 177 {
Mateom0104 0:1006a6a7855b 178
Mateom0104 0:1006a6a7855b 179 escribir();
Mateom0104 0:1006a6a7855b 180
Mateom0104 0:1006a6a7855b 181 if(verificacion==1)
Mateom0104 0:1006a6a7855b 182 {
Mateom0104 0:1006a6a7855b 183 return;
Mateom0104 0:1006a6a7855b 184 }
Mateom0104 0:1006a6a7855b 185
Mateom0104 0:1006a6a7855b 186
Mateom0104 0:1006a6a7855b 187 if(mascara==mascarax)
Mateom0104 0:1006a6a7855b 188 {
Mateom0104 0:1006a6a7855b 189 velocidad=1000;
Mateom0104 0:1006a6a7855b 190 }
Mateom0104 0:1006a6a7855b 191 wait_ms(velocidad);
Mateom0104 0:1006a6a7855b 192
Mateom0104 0:1006a6a7855b 193 mascara=mascara/2;
Mateom0104 0:1006a6a7855b 194
Mateom0104 0:1006a6a7855b 195
Mateom0104 0:1006a6a7855b 196
Mateom0104 0:1006a6a7855b 197 }
Mateom0104 0:1006a6a7855b 198 }
Mateom0104 0:1006a6a7855b 199 }
Mateom0104 0:1006a6a7855b 200
Mateom0104 0:1006a6a7855b 201 ///////////////////////////////////////////////////////////////////////////////
Mateom0104 0:1006a6a7855b 202
Mateom0104 0:1006a6a7855b 203 int main() { // fucnion principal
Mateom0104 0:1006a6a7855b 204 pc.baud(9600);
Mateom0104 0:1006a6a7855b 205 pc.attach(&Rx_interrupt, Serial::RxIrq);
Mateom0104 0:1006a6a7855b 206 sendSPI(0x0c,1);
Mateom0104 0:1006a6a7855b 207 sendSPI(0x0F,1);
Mateom0104 0:1006a6a7855b 208 wait (1);
Mateom0104 0:1006a6a7855b 209
Mateom0104 0:1006a6a7855b 210 sendSPI(0x0F,0);
Mateom0104 0:1006a6a7855b 211 wait (1);
Mateom0104 0:1006a6a7855b 212 sendSPI(0xB,0x7);
Mateom0104 0:1006a6a7855b 213 borrar();
Mateom0104 0:1006a6a7855b 214
Mateom0104 0:1006a6a7855b 215 int n=10;
Mateom0104 0:1006a6a7855b 216
Mateom0104 0:1006a6a7855b 217
Mateom0104 0:1006a6a7855b 218 while(1){
Mateom0104 0:1006a6a7855b 219
Mateom0104 0:1006a6a7855b 220
Mateom0104 0:1006a6a7855b 221 if(verificacion==0)
Mateom0104 0:1006a6a7855b 222 {
Mateom0104 0:1006a6a7855b 223 n=10;
Mateom0104 0:1006a6a7855b 224 while( n>6)
Mateom0104 0:1006a6a7855b 225 {
Mateom0104 0:1006a6a7855b 226 n=rand ()% 16;
Mateom0104 0:1006a6a7855b 227 // pc.printf("%d ",n);
Mateom0104 0:1006a6a7855b 228 }
Mateom0104 0:1006a6a7855b 229 posicion=3;
Mateom0104 0:1006a6a7855b 230 giro = 0;
Mateom0104 0:1006a6a7855b 231 wait(0.2);
Mateom0104 0:1006a6a7855b 232 mascarax=128;
Mateom0104 0:1006a6a7855b 233 }
Mateom0104 0:1006a6a7855b 234 else
Mateom0104 0:1006a6a7855b 235 {
Mateom0104 0:1006a6a7855b 236 verificacion=0;
Mateom0104 0:1006a6a7855b 237 posicion=posicion_original;
Mateom0104 0:1006a6a7855b 238 }
Mateom0104 0:1006a6a7855b 239
Mateom0104 0:1006a6a7855b 240
Mateom0104 0:1006a6a7855b 241 switch(n)
Mateom0104 0:1006a6a7855b 242 {
Mateom0104 0:1006a6a7855b 243 case 0: a(giro); play(); break;
Mateom0104 0:1006a6a7855b 244
Mateom0104 0:1006a6a7855b 245 case 1: b(giro); play(); break;
Mateom0104 0:1006a6a7855b 246
Mateom0104 0:1006a6a7855b 247 case 2: c(giro); play(); break;
Mateom0104 0:1006a6a7855b 248
Mateom0104 0:1006a6a7855b 249 case 3: d(giro); play(); break;
Mateom0104 0:1006a6a7855b 250
Mateom0104 0:1006a6a7855b 251 case 4: e(giro); play(); break;
Mateom0104 0:1006a6a7855b 252
Mateom0104 0:1006a6a7855b 253 case 5: f(giro); play(); break;
Mateom0104 0:1006a6a7855b 254
Mateom0104 0:1006a6a7855b 255 case 6: g(giro); play(); break;
Mateom0104 0:1006a6a7855b 256
Mateom0104 0:1006a6a7855b 257 default: pc.printf("Error en figura \n");
Mateom0104 0:1006a6a7855b 258 }
Mateom0104 0:1006a6a7855b 259
Mateom0104 0:1006a6a7855b 260 }
Mateom0104 0:1006a6a7855b 261 }
Mateom0104 0:1006a6a7855b 262 ////////////////////////////////////////////////////////////////////////////////////////////////
Mateom0104 0:1006a6a7855b 263 void Rx_interrupt() {
Mateom0104 0:1006a6a7855b 264
Mateom0104 0:1006a6a7855b 265 char d = pc.getc();
Mateom0104 0:1006a6a7855b 266 pc.printf("numero %d\n",d);
Mateom0104 0:1006a6a7855b 267
Mateom0104 0:1006a6a7855b 268
Mateom0104 0:1006a6a7855b 269 switch(d)
Mateom0104 0:1006a6a7855b 270 {
Mateom0104 0:1006a6a7855b 271 case 97: pmenos(); break;
Mateom0104 0:1006a6a7855b 272 case 100: pmas(); break;
Mateom0104 0:1006a6a7855b 273 case 119: giros(); break;
Mateom0104 0:1006a6a7855b 274 default: pc.printf("Error \n");
Mateom0104 0:1006a6a7855b 275
Mateom0104 0:1006a6a7855b 276 }
Mateom0104 0:1006a6a7855b 277
Mateom0104 0:1006a6a7855b 278 return;
Mateom0104 0:1006a6a7855b 279 }
Mateom0104 0:1006a6a7855b 280
Mateom0104 0:1006a6a7855b 281