[C] Gioco del 15

di il
6 risposte

[C] Gioco del 15

Ciao a tutti, premetto che ho iniziato da pochissimo a programmare e sto creando un software che produca un puzzle chiamato "Gioco del 15" funzionante...
Il fatto è che quando lo lancio in esecuzione e digito il numero 13, esso scompare...
Tuttavia prima mi è successo solo con il 14 e poco dopo solo con il 15 (e non mi sembra che il mio codice sia errato!).

Spero si riesca a capire abbastanza
Grazie a chi risponderà!

Link a pastebin: http://pastebin.com/gTAi0B9

p.s. La libreria time.h avevo dimenticato di toglierla, sorry

6 Risposte

  • Re: [C] Gioco del 15

    Il primo consiglio è cambiare IDE Butta nel cesso dev-c++ e scaricati Code::Blocks,posta il codice in questo forum e ne riparliamo.
  • Re: [C] Gioco del 15

    vbextreme ha scritto:


    Il primo consiglio è cambiare IDE Butta nel cesso dev-c++ e scaricati Code::Blocks,posta il codice in questo forum e ne riparliamo.
    Ho scaricato Code::Blocks e ho provato a compilarlo, ma mi da tuttavia lo stesso problema.
    Il codice l'ho postato su pastebin, ma comunque eccolo:
    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
     
    main() {
    int m[4][4]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,0}; //matrice già riempita
    int i,j;
    int num; //valore di scambio con quello della matrice
    int mosse=0;
     
     
    printf("Questo programma compone il gioco del 15\n\n");
     
    printf("Inserendo uno dei numeri adiacenti allo spazio, puoi mischiare la matrice!\n\n\n");    
     
             //stampa a video
            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");
        }
       
     
       do{
       
         printf("\nInserisci il numero (0 per terminare la mischia)\n");
              scanf("%d",&num);
             
         for(i=0;i<4;i++){
              for(j=0;j<4;j++){
             
               if(m[i][j]==num){
             
                if(m[i-1][j]==0 || m[i+1][j]==0 || m[i][j-1]==0 || m[i][j+1]==0) { //condizione che guarda i 4 numeri circostanti al numero digitato
               
                  m[i][j]=0;
                   //algoritmo di scambio eventualmente da rivedere
                  if(m[i-1][j]==0)
                   m[i-1][j]=num;
                    else if(m[i+1][j]==0)
                     m[i+1][j]=num;
                      else if(m[i][j-1]==0)
                       m[i][j-1]=num;
                        else if(m[i][j+1]==0)
                         m[i][j+1]=num;
                         
                }
               
                  //fine algoritmo scambio
                  system("cls");
                 
                  printf("Questo programma compone il gioco del 15\n\n");
              printf("Inserendo uno dei numeri adiacenti allo spazio, puoi mischiare la matrice!\n\n\n");  
             
                   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");
               }
               }
              }
             }
             
       }
       while(num!=0);
             
       
    printf("Ora e' il momento di risolvere il puzzle!!\n\n");
       
             
        do{
       
         printf("\nInserisci il numero da spostare (permi 0 quando hai finito)\n");
              scanf("%d",&num);
             
         for(i=0;i<4;i++){
              for(j=0;j<4;j++){
             
               if(m[i][j]==num){
             
                if(m[i-1][j]==0 || m[i+1][j]==0 || m[i][j-1]==0 || m[i][j+1]==0) {
     
                 m[i][j]=0;
                   //algoritmo di scambio eventualmente da rivedere
                  if(m[i-1][j]==0)
                   m[i-1][j]=num;
                    else if(m[i+1][j]==0)
                     m[i+1][j]=num;
                      else if(m[i][j-1]==0)
                       m[i][j-1]=num;
                        else if(m[i][j+1]==0)
                         m[i][j+1]=num;
                }
               
                  //fine algoritmo scambio
                  system("cls");
                 
                 
              printf("Questo programma compone il gioco del 15\n\n");
              printf("Inserendo uno dei numeri adiacenti allo spazio, puoi mischiare la matrice!\n\n\n");
             
                  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");
              }
               }
              }
             }
             mosse++;
       }
       while(num!=0);
       
       printf("Hai risolto il Gioco del 15 in %d mosse!\n\n", mosse-1);
    }
  • Re: [C] Gioco del 15

    Se vuoi una ben che mninima risposta indentalo come dio comanda.
  • Re: [C] Gioco del 15

    vbextreme ha scritto:


    Se vuoi una ben che mninima risposta indentalo come dio comanda.
    Ecco:
    #include <stdio.h>
    #include <stdlib.h>
    
    main()
    {
        int m[4][4]= {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,0};
        int i,j;
        int num;
        int mosse=0;
    
    
        printf("Questo programma compone il gioco del 15\n\n");
    
        printf("Inserendo uno dei numeri adiacenti allo spazio, puoi mischiare la matrice!\n\n\n");
    
    
        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");
        }
    
        do
        {
    
            printf("\nInserisci il numero (0 per terminare la mischia)\n");
            scanf("%d",&num);
    
            for(i=0; i<4; i++)
            {
                for(j=0; j<4; j++)
                {
    
                    if(m[i][j]==num)
                    {
    
                        if(m[i-1][j]==0 || m[i+1][j]==0 || m[i][j-1]==0 || m[i][j+1]==0)
                        {
    
                            m[i][j]=0;
                            //algoritmo di scambio eventualmente da rivedere
                            if(m[i-1][j]==0)
                                m[i-1][j]=num;
                            else if(m[i+1][j]==0)
                                m[i+1][j]=num;
                            else if(m[i][j-1]==0)
                                m[i][j-1]=num;
                            else if(m[i][j+1]==0)
                                m[i][j+1]=num;
    
                        }
    
                        //fine algoritmo scambio
                        system("cls");
    
                        printf("Questo programma compone il gioco del 15\n\n");
                        printf("Inserendo uno dei numeri adiacenti allo spazio, puoi mischiare la matrice!\n\n\n");
    
                        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");
                        }
                    }
                }
            }
    
        }
        while(num!=0);
    
    
        printf("Ora e' il momento di risolvere il puzzle!!\n\n");
    
    
        do
        {
    
            printf("\nInserisci il numero da spostare (permi 0 quando hai finito)\n");
            scanf("%d",&num);
    
            for(i=0; i<4; i++)
            {
                for(j=0; j<4; j++)
                {
    
                    if(m[i][j]==num)
                    {
    
                        if(m[i-1][j]==0 || m[i+1][j]==0 || m[i][j-1]==0 || m[i][j+1]==0)
                        {
    
                            m[i][j]=0;
                            //algoritmo di scambio eventualmente da rivedere
                            if(m[i-1][j]==0)
                                m[i-1][j]=num;
                            else if(m[i+1][j]==0)
                                m[i+1][j]=num;
                            else if(m[i][j-1]==0)
                                m[i][j-1]=num;
                            else if(m[i][j+1]==0)
                                m[i][j+1]=num;
                        }
    
                        //fine algoritmo scambio
                        system("cls");
    
    
                        printf("Questo programma compone il gioco del 15\n\n");
                        printf("Inserendo uno dei numeri adiacenti allo spazio, puoi mischiare la matrice!\n\n\n");
    
                        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");
                        }
                    }
                }
            }
            mosse++;
        }
        while(num!=0);
    
        printf("Hai risolto il Gioco del 15 in %d mosse!\n\n", mosse-1);
    }
  • Re: [C] Gioco del 15

    Non c'è molta logica nel tuo programma.....
    
    #include <stdio.h>
    #include <stdlib.h>
    #include <math.h>
    #include <time.h>
    
    int main()
    {
        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;
    
        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;
    
                    //moore
                    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 SUPERBREAK;
                }
            }
    
            SUPERBREAK:
            ++mosse;
            system("cls");
        }//main loop
    
        printf("Hai risolto il Gioco del 15 in %d mosse!\n\n", mosse);
    
        return 0;
    }
    
    
  • Re: [C] Gioco del 15

    vbextreme ha scritto:


    Non c'è molta logica nel tuo programma.....
    
    
    ...
    
    
    Grazie, perlomeno posso prendere qualche spunto per programmare con più logica
Devi accedere o registrarti per scrivere nel forum
6 risposte