[C] - turtle graphics

Pubblicità

skass89

Utente Attivo
Messaggi
1
Reazioni
0
Punteggio
24
salve ragazzi sono al mio primo post in questo forum chissà se voi riuscite ad aiutarmi, ho dei problemi con un programmino sul Turtle Graphics, praticamente la mia tartaruga non vuole muoversi comunque anche se la la prima istruzione la esegue non viene memorizzata per quella successiva cioè la tartaruga resta sempre in griglia[ 0 ] [ 0 ]. Vi posto il codice se volete dategli un'occhiatina e a me un aiutino :help:

PHP:
#include <stdio.h>
#define Nr 50
#define Nc 50
void alzaPenna (int matrix[] [ Nc ], int penna, int x, int y);
void abbassaPenna (int matrix[] [ Nc ], int penna, int x, int y);
void girareDx(int matrix[] [ Nc ], int penna, int x, int y);
void girareSx(int matrix[] [ Nc ], int penna, int x, int y);
void avanti(int matrix[] [ Nc ], int penna, int x, int y);
void visualizzaMatrix(int matrix[] [ Nc ], int penna, int x, int y);
int main(){
 
    int griglia[ Nr ] [ Nc ] = {{0}, {0}}; /* matrice */
    int idx, jack;
    int scelta; /* variabile per comando*/
    int penna;
 
    for(idx = 0; idx < Nr; idx++){
       for(jack = 0; jack < Nc; jack++){
          griglia[ idx ] [ jack ] = 0;
       }
    }
    scelta = -1;
 
    idx = 0;
    jack = 0;
 
    while(scelta != 7){
                 griglia[ idx ] [ jack ];
                 printf(" 1 - alza la penna\n");
                 printf(" 2 - Abbassa la penna\n");
                 printf(" 3 - Gira a destra\n");
                 printf(" 4 - Gira a sinstra\n");
                 printf(" 5 - Vai avanti di 10 spazi\n");
                 printf(" 6 - Visualizza la matrice 50 per 50\n");
                 printf(" 7 - Fine dati\n");
 
                 printf("Selezionare una preferenza = ");
                 scanf ("%d", &scelta);
 
       switch(scelta){
                   case 1 : alzaPenna(griglia, penna, idx, jack); break;
                   case 2 : abbassaPenna(griglia, penna, idx, jack); break;
                   case 3 : girareDx(griglia, penna, idx, jack); break;
                   case 4 : girareSx(griglia, penna, idx, jack); break;
                   case 5 : avanti(griglia, penna, idx, jack); break;
                   case 6 : visualizzaMatrix(griglia, penna, idx, jack); break;           
       }/*fine switch*/
    }/*fine while*/
system("pause");
return 0;
}
void alzaPenna(int matrix[] [ Nc ], int penna, int x, int y){
     matrix [ x ] [ y ] = 0;
     printf ("floor [ %d ] [ %d ] = 0\n", x,y);
     penna = 0;
}
void abbassaPenna(int matrix[] [ Nc ], int penna, int x, int y){
     matrix [ x ] [ y ] = 1;
     printf ("floor [ %d ] [ %d ] = 1\n", x, y);
     penna = 1;
}
void avanti(int matrix[] [ Nc ], int penna, int x, int y){
     y += 10;
     printf ("floor [ %d ] [ %d ]\n", x,y);
}
void girareDx(int matrix[] [ Nc ], int penna, int x, int y){
     if(penna == 1){
        y--;
        printf("TartaPosizione [ %d ] [ %d ] con penna abbassata\n", x, y);
        }
        else if(penna == 0){
           y--;
           printf("TartaPosizione [ %d ] [ %d ] con penna alzata\n", x, y);
        }
}
void girareSx(int matrix[] [ Nc ], int penna, int x, int y){
     if(penna == 1){
        x--;
        printf("TartaPosizione [ %d ] [ %d ] con penna abbassata\n", x, y);
        }
        else if(penna == 0){
           x--;
           printf("TartaPosizione [ %d ] [ %d ] con penna alzata\n", x, y);
        }
}
void visualizzaMatrix(int matrix[] [ Nc ], int penna, int x, int y){
     int i, j; /*contatori*/
 
     for(i = 0; i < Nr; i++){
        for(j = 0; j < Nc; j++){
           if(matrix[x][y] == 0){printf("|");}
           if(j % 50 == 0){printf("\n");}
           else if(matrix[x][y] == 1) { printf( "*");}  
        }
     }
     printf("\n");
}
 
Ciao,
credo che il problema risieda nelle funzioni avanti, girareDx e girareSx.
Queste funzioni modificano il valore delle coordinate che sono però passate come parametri. Tutte queste modifiche sono locali alle funzioni e non influenzano i parametri che hai passato. Cioè, se passi per esempio 10 come x ad una di queste funzioni e fai x-- dentro, poi ritorni dalla funzione, il valore della variabile x non viene modificato. Spero sdia chiara la spiegazione così veloce.

Le soluzioni semplici sono 2:
1. usi 2 variabili globali per tenere il valore delle coordinate e modifichi sempre quelle all'interno delle funzioni, senza doverle passare come parametro
2. fai in modo che le funzioni ritornino il valore delle coordinate modificate. Siccome sono 2 e le funzioni al max possono tornare un solo valore la cosa non è proprio immediata.
Ti consiglio il punto 1.
 
Pubblicità
Pubblicità
Indietro
Top