Aiuto con un turtle graphics

di il
4 risposte

Aiuto con un turtle graphics

Salve sono nuovo nel forum! Sono qua perchè sto cercando di fare una specie di turtle graphics, ma ho un problema che non riesco a risolvere! La mia tartaruga (un asterisco), quando la faccio camminare premendo i tasti, me la muove nelle giuste direzioni ma sdoppia la tartaruga!! Cioè se faccio una l me ne farà una seconda! Non ha senso Questo è il codice
#include<stdio.h>
#define x 70
#define y 35
#define size 100

int main(void){
    int i,r,c,j = 0,k[size],pg,turbo;
    
    
    /* Stamp */
    
    
    printf(" ");
    
    for(i = 1;i < x; i++){
        printf("+");
    }
    
    printf("\n");
    
    for(i = 0;i < y; i++){
        if(i == 10){
            printf("%c%35c%35c\n",'+','*','+');            
        }else{
            printf("%c%70c\n",'+','+');
        }
    }
    
    printf(" ");
    
    for(i = 1;i < x; i++){
        printf("+");
    }
    printf("\n");
    
    
    
    /*Movimenti*/
    
    printf("1=giu'  2=su  3=dex  4=lef  5=turbo(off/on)\n");
    while(k[i] != -1){      
        j++;
        i++;
        printf("Mossa %d:",j);
        scanf("%d",&k[i]); 
    }
    
    /*StampMov*/
    
    int floor[x][y];
    
    for(i = 0; i < y; i++){
        for(j = 0; j < x; j++){
            floor[x][y] = 0;        
        }
    }
    
    r = 10;
    c = 20;
    
    floor[r][c] = 1;
    turbo = 1;
    
    for(i = 1;k[i] != -1;i++){
        switch(k[i]){
                
            case 1:
                for(j = 1; j <= turbo; j++){
                    r+=1;
                    floor[r][c] = 1;
                }
                break;
                
            case 2:
                for(j = 1; j <= turbo; j++){
                    r-=1;
                    floor[r][c] = 1;
                }
                break;
                
            case 3:
                for(j = 1; j <= turbo; j++){
                    c+=1;
                    floor[r][c] = 1;
                }
                break;
                
            case 4:
                for(j = 1; j <= turbo; j++){
                    c-=1;
                    floor[r][c] = 1;
                }
                break;            
                
            case 5:
                if(turbo == 5){
                    turbo = 1;
                }
                if(turbo == 1){
                    turbo = 5;
                }
                break;           
                
        }
        
    }
    
    for(i = 0; i < y; i++){
        
        for(j = 0; j < x; j++){
            if(floor[i][j] != 1){
                printf(" ");
            }if(floor[i][j] == 1){
                printf("*"); 
            }                  
        }
        printf("\n");
    }
    
    
    return 0;
}
Penso che sia un problema dopo /* StampMov */

4 Risposte

  • Re: Aiuto con un turtle graphics

    Ci sono parecchi errori, comincia a correggere questi:
    
    // <------------FIXME i=0; 
    printf("1=giu'  2=su  3=dex  4=lef  5=turbo(off/on)\n");
    while(k[i] != -1){     
    ...       
    int floor[x][y]; // <------------FIXME int floor[y][x];
    ...       
            for(i = 0; i < y; i++){
                for(j = 0; j < x; j++){
                    floor[x][y] = 0;   // <------------FIXME int floor[i][j];
          
    
  • Re: Aiuto con un turtle graphics

    Così penso sia un po più carina.
    
    #include <stdio.h>
    #include <string.h>
    
    #define X 40
    #define Y 20
    #define BLANK  ' '
    #define BORDER ':'
    #define TURTLE '*'
    
    void clear (char field[Y][X])
    {
      int i;
      memset (field,BLANK,Y*X);
      memset (field[0],BORDER,X);
      memset (field[Y-1],BORDER,X);
      for (i=0;i<Y;i++)
        field[i][0]=field[i][X-1]=BORDER;
      
    }
    void display (char field[Y][X])
    {
      int x,y;
      for (y=0;y<Y;y++)
      {
         for (x=0;x<X;x++)
           printf ("%c",field[y][x]);
         printf ("\n");
      }
    }
    
    int main ()
    {
      char field[Y][X];
      
      enum {LDOWN=1,DOWN,RDOWN,LEFT,CLEAR,RIGHT,LUP,UP,RUP};
      char moves[256],*p;
      int  move;
      
      int x=(X/2);
      int y=(Y/2);
      moves[0]='\0';
      p=moves;
      
      clear (field);
      
      do
      {
        field[y][x]=TURTLE;
            
        if (!*p)
        {
          display (field);
          printf ("Use keypad numbers (1 to 9) for directions.\nThis input accepts %d moves. Use %d to CLEAR\n",sizeof(moves)-1,CLEAR);
          scanf ("%255s",moves);
          p=moves;
        }
        move=(*p++)-'0';
        
        switch (move)
        {
          case LDOWN:
            if (y<Y-2) y++;
            if (x>1)   x--;
            break;
          case DOWN:
            if (y<Y-2) y++;
            break;
          case RDOWN:
            if (y<Y-2) y++;
            if (x<X-2) x++;
            break;
          case LEFT:
            if (x>1)   x--;
            break;
          case CLEAR:
            clear (field);
            break;
          case RIGHT:
            if (x<X-2) x++;
            break;
          case LUP:
            if (y>1)   y--;
            if (x>1)   x--;
            break;
          case UP:
            if (y>1)   y--;
            break;
          case RUP:
            if (y>1)   y--;
            if (x<X-2) x++;
            break;
        }
      }while (1);
      
      return 0;
    }
    
    edit:
    acceptS 3^ persona
  • Re: Aiuto con un turtle graphics

    Ho provato sia il tuo che il mio corretto e mi danno errori
    Comunque ho migliorato il mio così e penso che vada molto meglio!
    #include<stdio.h>
    
    #define x 20
    #define y 20
    
    int i,j;
    void stamp(int floor[][y]);
    
    int main(void){
    
        int cmd, r = 1, c = 2;
        int floor[x][y];
        
        for(i=0;i < y;i++){
            for(j=0;j < x; j++){
                floor[i][y]=0;
            }
        }
        
        floor[r][c] = 6;
        
        while(cmd != EOF){
            printf("1 Giu'\n2 Su\n3 Destra\n4 Sinistra\n5 Stampa terreno\n-1 Chiudi\n>>");     
            scanf("%d",&cmd);
            
            switch(cmd){
                    
                case 1:
                    r+=1;
                    floor[r][c] = 6;
                    break;
                    
                case 2:
                    r-=1;
                    floor[r][c] = 6;
                    break;
                    
                case 3:
                    c+=1;
                    floor[r][c] = 6;
                    break;
                    
                case 4:
                    c-=1;
                    floor[r][c] = 6;
                    break;      
                    
                case 5:
                    stamp(floor);
                    break;
                    
                default:
                    if(cmd != -1){
                     printf("Controlla meglio le opzioni!\n");   
                    }
                    break;
            }
        }
        
        stamp(floor);
    
        return 0;
    }
    
    void stamp(int floor[][y]){
        
        for(i = 0; i < y; i++){        
            for(j = 0; j < x; j++){
                if(floor[i][j] == 6){
                    printf(" * ");
                }
                if(floor[i][j] != 6){
                    printf(" @ ");
                }
    
            }
            printf("\n");
        }    
        printf("\n");
    }
    Mi ha illuminato un mio amico
  • Re: Aiuto con un turtle graphics

    Bene, sono contento
Devi accedere o registrarti per scrivere nel forum
4 risposte