tetris, envia figuras aleatorias, corre columnas, el temporizador de caida muestra falla, falta la comparacion lateral.

Dependencies:   mbed

Fork of Nucleo_pwm3 by julian alvarez

Files at this revision

API Documentation at this revision

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