Tetris C , problemi rotazione

di il
3 risposte

Tetris C , problemi rotazione

Ragazzi ho quasi finito il progetto del TETRIS in c , ma ho un problema abbastanza stupido che mi sta facendo perdere tantissime ore, in pratica non riesco a spostare a destra e a sinistra e ruotare un pezzo . Il pezzo in questione è la linea da 3 quadratini. Vi lascio il codice , il quadrato invece funziona perfettamente.

3 Risposte

  • Re: Tetris C , problemi rotazione

    CI lasci il codice ma anche una bella gatta da pelare ... E dirci qualcosa in più su cosa hai tentato di fare e cosa non va nel codice?
  • Re: Tetris C , problemi rotazione

    Allora ho dei problemi nello spostamento della figura a rettangolo nel codice , in pratica quando vado agli estremi della tabella si presenta il problema mentre con il quadrato no !

    Questo è il controllo degli estremi che non riesco a risolvere if a==1 è il rettangolo mentre il quadrato funziona bene if a==2 :

    while (Tabella [y+2][x] == 0 && Tabella [y+2][x+1] == 0)
    {
    if(a==0){
    Tabella [y][x] = Pezzo_Attuale [0][0];
    Tabella [y][x+1] = Pezzo_Attuale [0][1];
    Tabella [y+1][x] = Pezzo_Attuale [1][0];
    Tabella [y+1][x+1] = Pezzo_Attuale [1][1];

    }
    if(a==1){
    Tabella [y][x] = Pezzo_Attuale [0][0];
    Tabella [y][x+1] = Pezzo_Attuale [0][1];
    Tabella [y+1][x] = Pezzo_Attuale [1][0];
    Tabella [y+1][x+1] = Pezzo_Attuale [1][1];
    Tabella [y+2][x] = Pezzo_Attuale [2][0];
    }





    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    
    void main ()
    {
       int i, j, k;
    
       int x;
       int y;
       int a;
    
       int d ;
    
       int f ;
    
       char comando;
    
       int punti = 0;
    
       int Tabella [12][8] = {{2, 0, 0, 0, 0, 0, 0, 2},
                             {2, 0, 0, 0, 0, 0, 0, 2},
                             {2, 0, 0, 0, 0, 0, 0, 2},
                             {2, 0, 0, 0, 0, 0, 0, 2},
                             {2, 0, 0, 0, 0, 0, 0, 2},
                             {2, 0, 0, 0, 0, 0, 0, 2},
                             {2, 0, 0, 0, 0, 0, 0, 2},
                             {2, 0, 0, 0, 0, 0, 0, 2},
                             {2, 0, 0, 0, 0, 0, 0, 2},
                             {2, 0, 0, 0, 0, 0, 0, 2},
                             {2, 2, 2, 2, 2, 2, 2, 2}};
    
       int Quadrato [2][2] = {{1, 1},
                             {1, 1}};
    
    
       int  rettangolo1 [3][2] = {{1,0},
                               {1,0},
                               {1,0}};
    
    
    
       int Pezzo_Attuale[3][3];
    
    
    
       srand((unsigned int) time(0));
    
       for (k=0; k<20; k++)
       {
           printf("\n\n\n\n\n");
    
               x=3;
               y=0;
    
               a = rand () %2;
    
               if (a == 0)
               {
                  Pezzo_Attuale [0][0] = Quadrato [0][0];
                  Pezzo_Attuale [0][1] = Quadrato [0][1];
                  Pezzo_Attuale [1][0] = Quadrato [1][0];
                  Pezzo_Attuale [1][1] = Quadrato [1][1];
               }
    
              if (a == 1)
               {
                   Pezzo_Attuale [0][0] = rettangolo1 [0][0];
                   Pezzo_Attuale [1][0] = rettangolo1 [1][0];
                   Pezzo_Attuale [0][1] = rettangolo1 [0][1];
                   Pezzo_Attuale [1][1] = rettangolo1 [1][1];
                   Pezzo_Attuale [2][0] = rettangolo1 [2][0];
               }
    
    
               // controllo while agli estremi della tabella
    
                   while (Tabella [y+2][x] == 0 && Tabella [y+2][x+1] == 0)
                   {
                       if(a==0){
                       Tabella [y][x] = Pezzo_Attuale [0][0];
                       Tabella [y][x+1] = Pezzo_Attuale [0][1];
                       Tabella [y+1][x] = Pezzo_Attuale [1][0];
                       Tabella [y+1][x+1] = Pezzo_Attuale [1][1];
    
                       }
                       if(a==1){
                           Tabella [y][x] = Pezzo_Attuale [0][0];
                           Tabella [y][x+1] = Pezzo_Attuale [0][1];
                           Tabella [y+1][x] = Pezzo_Attuale [1][0];
                           Tabella [y+1][x+1] = Pezzo_Attuale [1][1];
                           Tabella [y+2][x] = Pezzo_Attuale [2][0];
                       }
    
    
                       for(i=0; i<12; i++)
                       {
                           printf("\n");
    
                           for(j=0; j<8; j++)
                           {
                               if (Tabella [i][j] == 0)
                                   printf("   ", Tabella [i][j]);
    
                               if (Tabella [i][j] == 1)
                                   printf("[o]", Tabella [i][j]);
    
                               if (Tabella [i][j] == 2)
                                   printf("[x]", Tabella [i][j]);
    
                           }
                       }
                       printf("\n\n");
    
                       printf ("S = Sposta Giu' \n");
                       printf ("A = Sposta a Sx \n");
                       printf ("D = Sposta a DX \n");
                       printf ("Q = Ruota a Dx \n");
                       printf ("E = Ruota a Sx \n");
                       printf ("\n\n");
    
                       printf ("punti: %d", punti);
                       printf("\n\n");
    
                       printf("inserire comando: ");
                       scanf("%s", &comando);
    
                       printf("\n\n\n\n\n\n\n\n\n\n");
    
                           // caso Quadrato
                           if (Pezzo_Attuale [0][0] == 1 && Pezzo_Attuale [0][1] == 1)
                           {
                               if (comando == 's' || comando == 'S')
                               {
                                   y = y+1;
                                   Tabella [y-1][x] = 0;
                                   Tabella [y-1][x+1] = 0;
                               }
    
                               if (comando == 'a' || comando == 'A')
                               {
                                   if (Tabella [y][x-1] == 0 && Tabella [y+1][x-1] == 0)
                                   {
                                       x = x-1;
                                       Tabella [y][x+2] = 0;
                                       Tabella [y+1][x+2] = 0;
                                   }
                               }
    
                               if (comando == 'd' || comando == 'D')
                               {
                                   if (Tabella [y][x+2] == 0 && Tabella [y+1][x+2] == 0)
                                   {
                                       x = x+1;
                                       Tabella [y][x-1] = 0;
                                       Tabella [y+1][x-1] = 0;
                                   }
                               }
                           }
    
    
                           //caso rettangolo 1
                             if (a==1)
                           {
    
    
    
                               if (comando == 's' || comando == 'S')
                               {
                                   y = y+1;
    
                                   Tabella [y-1][x] = 0;
    
    
                               }
    
                               if (comando == 'a' || comando == 'A')
                               {
                                   if (Tabella [y][x-1] == 0)
                                   {
                                       x = x-1;
                                    Tabella  [y][x+1]= 0;
                                    Tabella[y+1][x+1] =0;
                                    Tabella[y+2][x+1] = 0;
                                   }
                               }
    
                               if (comando == 'd' || comando == 'D')
                               {
                                if (Tabella [y][x+1] == 0)
                                   {
                                       x = x+1;
                                    Tabella  [y][x-1]= 0;
                                    Tabella[y+1][x-1] =0;
                                    Tabella[y+2][x-1] = 0;
                                   }
                               }
    
                               if (comando == 'q' || comando == 'Q')
                               {
                                   Pezzo_Attuale [0][0] = rettangolo1 [0][0];
                                   //Pezzo_Attuale [1][0] = 0;
                                   Pezzo_Attuale [0][1] = rettangolo1 [1][0];
                                   Pezzo_Attuale [0][2] = rettangolo1 [2][0];
                                   //Pezzo_Attuale [2][0] = 0;
    
    
    
                                   Tabella [y][x]       = rettangolo1 [0][0];
                                   Tabella [y][x+1]    = rettangolo1 [0][1];
                                   Tabella [y][x+2]     = rettangolo1 [0][2];
    
                               }
    
    
                           }
    
                   }
                   Tabella [y][x] = Pezzo_Attuale [0][0];
                   Tabella [y][x+1] = Pezzo_Attuale [0][1];
                   Tabella [y+1][x] = Pezzo_Attuale [1][0];
                   Tabella [y+1][x+1] = Pezzo_Attuale [1][1];
    
                   // Blocco per eliminare l'ultima riga se completa
    
                   d = 9 ;
                   f = 1 ;
    
                       for(d=9; d>0; d--)
                       {
                           if (Tabella [d][1] == 1 &&
                               Tabella [d][2] == 1 &&
                               Tabella [d][3] == 1 &&
                               Tabella [d][4] == 1 &&
                               Tabella [d][5] == 1 &&
                               Tabella [d][6] == 1 )
    
                               {
                                   while (d > 0)
                                   {
                                       Tabella [d][f] = Tabella [d-1][f];
                                       Tabella [d][f+1] = Tabella [d-1][f+1];
                                       Tabella [d][f+2] = Tabella [d-1][f+2];
                                       Tabella [d][f+3] = Tabella [d-1][f+3];
                                       Tabella [d][f+4] = Tabella [d-1][f+4];
                                       Tabella [d][f+5] = Tabella [d-1][f+5];
    
                                       d = d-1;
                                   }
                                   punti = punti +1;
                               }
                       }
       }
    
       printf ("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n");
       printf ("                    sessione terminata");
       printf ("\n\n");
       printf ("                    punti: %d", punti);
       printf ("\n\n\n\n");
    }
    
  • Re: Tetris C , problemi rotazione

    Per cominciare c'è un problema nella variabile

    comando

    che è un semplice char ma tu la tratti da stringa nella

    scanf

    e questo "sporca" lo stack e produce problemi imprevedibili.
Devi accedere o registrarti per scrivere nel forum
3 risposte