tetris, envia figuras aleatorias, corre columnas, el temporizador de caida muestra falla, falta la comparacion lateral.
Fork of Nucleo_pwm3 by
Revision 2:fc251f89bd1b, committed 2018-10-04
- Comitter:
- jiuk
- Date:
- Thu Oct 04 00:48:41 2018 +0000
- Parent:
- 1:bd308ee8776e
- Commit message:
- version 1.2 falta corregir error de lineas (puntos)
Changed in this revision
metrix.cpp | Show annotated file Show diff for this revision Revisions of this file |
--- a/metrix.cpp Tue Oct 02 17:51:50 2018 +0000 +++ b/metrix.cpp Thu Oct 04 00:48:41 2018 +0000 @@ -35,13 +35,15 @@ void cop_mat(uint8_t a,uint8_t b,uint8_t c,uint8_t* fig,uint8_t columna) { - mat_tmp[0]= *(fig+5)>>columna-1; - mat_tmp[1]= *(fig+a)>>columna-1; //Realiza una copia de la matriz actual fila por fila. - mat_tmp[2]= *(fig+b)>>columna-1; - mat_tmp[3]= *(fig+c)>>columna-1; + if(((mat_act[cont-2]& *(fig+c)>>columna-1)==0)&&((mat_act[cont-1]& *(fig+b)>>columna-1)==0)&&((mat_act[cont]& *(fig+a)>>columna-1)==0)){ + mat_tmp[0]= *(fig+5)>>columna-1; + mat_tmp[1]= *(fig+a)>>columna-1; //Realiza una copia de la matriz actual fila por fila. + mat_tmp[2]= *(fig+b)>>columna-1; + mat_tmp[3]= *(fig+c)>>columna-1; + } } -void borrar() //borrar toda la matriz; +void borrar() //borrar toda la matriz; { int i; for(i=0;i<=8;i++) @@ -74,10 +76,11 @@ } } if(fila>8) - fila=8; - if(fila==0){ - borrar(); - fila=8; + fila=8; + if(fila<=1){ + wait_ms(VEL); + borrar(); + fila=8; } command.printf("\n buscar fila \n %d",fila); command.printf("\n ******************************* \n "); @@ -86,42 +89,58 @@ void guardar_mat(){ mat_act[fila-3]=mat_tmp1[0]; mat_act[fila-2]=mat_tmp1[1]; - mat_act[fila-1]=mat_tmp1[2]; //pasa de 0 a -1 - mat_act[fila]=mat_tmp1[3]; //pasa de +1 a 0 - }; + mat_act[fila-1]=mat_tmp1[2]; + mat_act[fila ]=mat_tmp1[3]; + }; void correr_fig(){ - uint8_t correr=0; - correr=command.getc(); - command.printf("\n4- Correr: %d",correr); + + uint8_t correr=command.getc(); + if(correr==30) //Arriba, voltear figura. correr=1; + if(correr==29) //izquierda, correr la figura. correr=2; + if(correr==28) //Derecha correr la figura. correr=3; + + if(correr==31) //bajar, baja la figura. + correr=0; + switch (correr){ + case 0: - break; //cae la figura; + cont++; + if(cont>8)cont=8; + break; //cae la figura; + case 1: + if( (mat_tmp[1]==2) || (mat_tmp[1]==1)|| (mat_tmp[1]==3)) //faltan condiciones para evitar desplazamiento innecesario. + ncolumna--; grados++; if(grados>4) grados=1; - break; //Girar la figura; + break; //Girar la figura; + case 2: ncolumna++; if(ncolumna>6){ - if(((mat_tmp[2]==3) && (mat_tmp[3]==6)) || (mat_tmp[2]==7) || (mat_tmp[3]==7)) + if(((mat_tmp[2]==3) && (mat_tmp[3]==6)) || (mat_tmp[2]==7) || (mat_tmp[3]==7)) ncolumna=6; + if((mat_tmp[1]==2) &&(mat_tmp[2]==2) && (mat_tmp[3]==2)) + ncolumna=7; } - if(ncolumna>7) - ncolumna=7; - break; //correr a la Derecha; + //if(ncolumna>7) + //ncolumna=7; + break; //correr a la Derecha; + case 3: ncolumna--; if(ncolumna<1) ncolumna=1; - break; //correr a la izquierda; + break; //correr a la izquierda; } } @@ -183,8 +202,18 @@ void fichas(){ ficha= rand() % 5+1; grados= rand() % 4+1; - ncolumna=3; + ncolumna=4; } + +void buscar_linea(){ + for(uint8_t i=0;i<9;i++){ + if(mat_act[i]==255){ + for(uint8_t a=i;a>=1;a--){ + sendSPI(a,mat_act[a-1]); + } + } + } +} int main() { test(); @@ -193,17 +222,13 @@ fichas(); buscar_fil(); cont=0; - while (cont<=fila){ + while (cont<fila){ correr_fig(); dibujar(ficha,grados,ncolumna); buscar_fil(); imp_mat(mat_tmp); - //probador bugs - uint8_t correr=command.getc(); - if(correr==31) //Arriba, voltear figura. - cont++; - command.printf("\n4- Cont: %d",cont); } - guardar_mat(); + buscar_linea(); + guardar_mat(); } } \ No newline at end of file