Gioco 15 in lunguaggio C

di il
4 risposte

Gioco 15 in lunguaggio C

Salve qualcuno puo' spiegarmi questo codice? Grazie
 
 int m[4][4] = {
                    {1,2,3,4},
                    {5,6,7,8},
                    {9,10,11,12},
                    {13,14,15,0}
                  };


    srand((unsigned)time(NULL));

    int i,j,k,jj,kk;
    int num,mem;

    printf("Questo programma compone il gioco del 15\n\n");

    //mischio
    num = (rand() % 100)+1;
    for (i = 0 ; i < num ; i++)
    {
        k = rand() % 4;
        j = rand() % 4;
        kk = rand() % 4;
        jj = rand() % 4;

        mem = m[k][j];
        m[k][j] = m[kk][jj];
        m[kk][jj] = mem;
    }

    printf("Inserendo uno dei numeri adiacenti allo spazio, puoi mischiare la matrice!\n\n\n");

    int mosse=0;
    int *contmosse;
    
    while(num)
    {
        //disegno mappa
        for(i=0; i<4; i++)
        {
            for(j=0; j<4; j++)
            {
                if(m[i][j]==0)
                    printf("    ");
                else
                    printf(" %2d ",m[i][j]);
            }
            printf("\n\n");
        }

        printf("\nInserisci il numero (0 per terminare la mischia):");
        scanf("%d",&num);

        for(i=0; i<4; i++)
        {
            for(j=0; j<4; j++)
            {
                if(m[i][j] != num) continue;

                //spostamento
                kk = i;
                jj = j;
                if (j > 0 && !m[i][j - 1])
                    --jj;
                else if ( j < 4 && !m[i][j + 1] )
                    ++jj;
                else if ( i > 0 && !m[i - 1][j] )
                    --kk;
                else if ( i < 4 && !m[i + 1][j] )
                    ++kk;

                mem = m[i][j];
                m[i][j] = m[kk][jj];
                m[kk][jj] = mem;
                goto contmosse;
            }
        }

        contmosse:
        ++mosse;
        system("cls");
    }//main loop

    printf("Hai risolto il Gioco del 15 in %d mosse!\n\n", mosse);


}

4 Risposte

  • Re: Gioco 15 in lunguaggio C

    Spiegare tutto il codice? E che sei a scuola?

    Cosa non capisci in particolare?
  • Re: Gioco 15 in lunguaggio C

    Si scusami.
    Non riesco a capire come posso sostituire "goto" con un altra istruzione e il funzionamento dello spostamento.
  • Re: Gioco 15 in lunguaggio C

    Ciao Viki o forse dovrei chiamarti Gatto2?

    Gatto2 ha scritto:


    Salve. Sto scrivendo un codice per il gioco del 15 in linguaggio C e avrei bisogno di un piccolo aiuto.Sono riuscito a scriverlo ma il codice di spostamento dei numeri mi sembra un po' troppo difficile. Come posso farlo diventare piu' facile?. Grazie in anticipo
    Vi invio le righe di codice di cui sto parlando
     for(j=0; j<4; j++)
                {
                    if(m[i][j] != num) continue;
    
                    //spostamento
                    kk = i;
                    jj = j;
                    if (j > 0 && !m[i][j - 1])
                        --jj;
                    else if ( j < 4 && !m[i][j + 1] )
                        ++jj;
                    else if ( i > 0 && !m[i - 1][j] )
                        --kk;
                    else if ( i < 4 && !m[i + 1][j] )
                        ++kk;
    
                    mem = m[i][j];
                    m[i][j] = m[kk][jj];
                    m[kk][jj] = mem;
                    goto contmosse;
                }

    spectrum ha scritto:


    goto contmosse;
    ma contmosse non c'e'

    Comincerei dalla postare l'intero codice, almeno della funzione in oggetto.

    Codice lo hai scritto tu ? Perche se lo hai scritto tu, lo possiedi a pieno, e non puo' essere difficile.
    Se invece non lo hai scritto tu, allora la domanda e' "mi spiegate cosa fa questo codice" ?
    In ogni caso da uno sguardo veloce ritengo che quel codice non sia un granché, inoltre manca anche un controllo sull'esistenza della soluzione.
  • Re: Gioco 15 in lunguaggio C

    Usa un break ma prima imposta una variabile booleana a true in modo da controllarla nel for successivo per un altro break. Schematicamente

    for
    {
    var=false;
    for
    {
    ...
    var=true;
    break;
    }
    if(var) break;
    }
Devi accedere o registrarti per scrivere nel forum
4 risposte