Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2007
    Messaggi
    168

    [C] gioco del memory

    ragazzi un mio amico ha questo problema da risolvere... avrebbe bisogno di consigli...
    PRIMA PARTE DEL PROGETTO

    Il progetto consiste nello sviluppare un programma che
    permetta ad un utente di giocare al gioco del:

    MEMORY

    dare la possibilità di selezionare il livello di gioco con
    numero di carte per riga minimo: 2, massimo: 6;
    numero di carte per colonna minimo: 2, massimo 10

    L'interfaccia grafica deve essere schematica (a caratteri),
    ma sviluppata in modo da rendere chiaro lo stato di avanzamento
    del gioco.

    Sviluppare l'interfaccia grafica schematica.

    All'avvio del programma deve essere richiesto
    il nome dell'utente che inizia a giocare.

    Predisporre una sezione chiamata help, richiamabile
    in qualsiasi momento all'interno dell'applicazione, che
    permetta agli utenti di conoscere le regole del gioco e le
    modalità di utilizzo del programma, oltre una descrizione di
    tutte le funzionalità disponibili.

    SECONDA PARTE DEL PROGETTO

    La seconda parte del progetto consiste in una evoluzione del
    progetto che avete svolto per la prima parte. In particolare
    le modifiche comprendono: lo sviluppo di nuove funzionalità e
    la reingegnerizzazione del codice.

    Nuove funzionalità da implementare:

    Inserire tutti i controli e relativi messaggi di
    errore nel caso di qualsiasi inserimento errato da
    parte dell'utente

    Una volta terminata la partita dare la possibilità
    di giocarne un'altra senza uscire dal programma

    Dare la possibilità di terminare una partita in qualsiasi
    momento e ovviamente di poterne iniziare una nuova

    Per ogni mossa fatta tenere traccia del tempo impiegato per
    eseguirla (UTILIZZARE UNA LISTA DINAMICA)

    Stampare l'elenco delle mosse fatte a fine partita

    Modifiche al codice:

    Utilizzo di funzioni per migliorare il codice ed evitare
    inutili ripetizioni di porzioni di codice

    I commenti devono seguire le seguenti specifiche:

    Ogni funzione deve avere un commento prima dell'intestazione
    che specifichi nell'ordine:
    1.nome della funzione,
    2.breve descrizione delle funzionalità,
    3.elenco dei parametri in ingresso con relativo significato,
    4.descrizione dell'eventuale parametro restituito.

    Ad esempio:

    /*
    * calcolaMediaValoriArray()
    * funzione che calcola la media dei valori presenti all'interno
    * di un array passato come argomento alla funzione.
    *
    * Parametri in ingresso:
    * array: vettore dei valori dei quali deve essere calcolata la media
    * dim: numero di celle presenti all'interno del vettore
    *
    * Valore restituito:
    * un float che indica la media dei valori inseriti
    */
    float calcolaMediaValoriArray(int array[], int dim)
    {
    ...
    }

    Inoltre per ogni variabile o costante dichiarata deve esistere un commento
    che ne descriva il ruolo all'interno del programma o della funzione; e devono
    essere presenti commenti all'interno del codice che descrivano le
    parti più salienti.

  2. #2
    Utente di HTML.it
    Registrato dal
    Jan 2007
    Messaggi
    168
    ha realizzato questo codice...

    codice:
    #include <stdio.h>
    #include <stdlib.h>
    
    #define NUM_LETTERE 46
    
    
    int richiesta_nome_giocatore();
    int numeroRandom(int lBound, int uBound); //Variabile di tipo integer: dichiarazione del blocco in cui verrà svolto la random 
    void inizio(void); //Variabile di tipo void: dichiarazione della chiamata della schermata principale del gioco
    void istruzioni(void);
    int main()
    {
              int i, j, lt; //Variabile di tipo integer: dichiarazioni delle variabili da utilizzare nei cicli successivi for 
              int lettereDaInserire; 
              int nRighe, nColonne;
              int riga_carta1, colonna_carta1, riga_carta2, colonna_carta2; 
              int tentativi,punti,mosse_errate,mosse_corrette;
              int caratteriUtilizzati[NUM_LETTERE];
              char nome_giocatore[30]; //Variabile di tipo character: dichiarazione della variabile che conterrà la stringa del nome del giocatore
              char caratteri[NUM_LETTERE+1] = {"ABCDEFGHILMNOPQRSTUVZWHKYJ1234567890£$^&=?!<>-"}; //Variabile di tipo character: dichiarazione dell'elenco dei caratteri da utilizzare nella random
              char** matrice; //Variabile di tipo character: dichiarazione della matrice con doppio puntatore
              char** gioco;
              char menu1,menu2;
              inizio();        
              fflush(stdin); 
              menu1 = getch();
              system("cls");
              /*Menu primario in cui si hanno delle scelte  */
              switch(menu1) 
              {               
                             case '1':
                                  {
                                      
                                     
                                     for (i = 0; i < NUM_LETTERE; i++)
                                        caratteriUtilizzati[i] = 0;
                                     /* Richiesta del nome del giocatore */
                                     puts("Inserire nome giocatore:"); 
                                     scanf("%s",&nome_giocatore); 
                                     system("cls");
                                     /* Richiesta delle righe e colonne per creazione di matrice dinamica */
                                     printf("Numero righe: ");
                                     fflush(stdin);
                                     scanf("%d",&nRighe);
                                     printf("Numero colonne: ");
                                     fflush(stdin);
                                     scanf("%d",&nColonne);
                                     /*Costruzione della matrice dinamica utilizzando le variabili ottenute dall'utente*/
                                     lettereDaInserire = nRighe * nColonne;
                                     if (lettereDaInserire % 2 == 1 || lettereDaInserire == 0)
                                     {
                                        printf("\nNumero di celle non valido!");
                                        exit(0);
                                     }
                                     matrice = (char **)malloc(sizeof(char*)*nRighe);
                                     for (i = 0; i < nRighe; i++)
    		                                 *(matrice + i) = (char *)malloc(sizeof(char)*nColonne);
                                     for (i = 0; i < nRighe; i++)
    		                                 for (j = 0; j < nColonne; j++)
     					                                 *(*(matrice + i) + j) = ' ';
                                 	 do
                                 	 {
                                 	    lt = numeroRandom(0,NUM_LETTERE-1);
                                 	    if (!caratteriUtilizzati[lt])
                                 	    {
                                           do
                                           {
                                              i = numeroRandom(0,nRighe-1);
                                              j = numeroRandom(0,nColonne-1);
                                           }
                                           while (*(*(matrice + i) + j) != ' ');
                                           *(*(matrice + i) + j) = caratteri[lt];
                                           do
                                           {
                                               i = numeroRandom(0,nRighe-1);
                                               j = numeroRandom(0,nColonne-1);
                                           }
                                           while (*(*(matrice + i) + j) != ' ');
                                           *(*(matrice + i) + j) = caratteri[lt];
                                           caratteriUtilizzati[lt] = 1;
                                           lettereDaInserire-=2;
                                        }
                                      }
                                      while(lettereDaInserire > 0);
                                      printf("\n\n"); 
                                      /*Stampa della matrice per prova */ 
                                      for (i = 0; i <nRighe; i++)
                                      {
                                          for (j = 0; j < nColonne; j++)
                                          printf("matrix [%d] [%d] = %c\n",i,j,*(*(matrice + i) + j)); //da trascurare la stampa
                                          
                                      } 
                                      /*Stampa della vera matrice */
                                      int k = 0; 
                                      int n = 0;            
                                      for (j = 0; j < nColonne; j++)
                                      {
                                        printf(" %d",k++);
                                      }    
                                      printf("\n");
                                      for (i = 0; i < nRighe; i++)
                                      {
                                        printf("%d",n++);
                                        for (j = 0; j < nColonne; j++)
                                        printf(" %c",*(*(matrice + i) + j)/*= '#'*/);
                                        printf("\n");
                                      }
                                         
                                      printf("\n");
                                      printf("Menu'",nome_giocatore);
                                      puts("");
                                      puts("[1] - Scopri le carte\n[2] - Salva la partita\n[3] - Carica la partita");
                                      puts("[4] - Visualizza lista mosse\n[5] - Istruzioni\n[6] - Esci");
                                      printf("Che cosa vuoi fare, %s?\n");
                                      menu2 = getch(); 
                                      /*Menu secondario in cui si hanno delle scelte  */
                                      switch(tolower(menu2)) //Funzione switch:
                                          {   
                                              case '1':
                                              {
                                                  tentativi = 0;
                                                  mosse_errate = 0;
                                                  punti = 0;
                                                  mosse_corrette = 0;
                                                  puts("Carta 1:");
                                                  fflush(stdin);
                                                  scanf("%d %d",&riga_carta1,&colonna_carta1);
                                                  if (((riga_carta1>=0) && (colonna_carta1>=0)) && ((riga_carta1<nRighe) && (colonna_carta1<nColonne))) 
                                                  { 
                                                    *(*(gioco+riga_carta1)+colonna_carta1) = *(*(matrice+riga_carta1)+colonna_carta1); 
                                                    system("cls");
                                                    for(i=0; i<nRighe;i++)
                                                    {
                                                        for(j=0; j<nColonne; j++)
                                                            printf("%c",*(*(gioco+i)+j));
                                                        printf("\n");
                                                    }    
                                                    puts("Carta 2"); 
                                                    fflush(stdin);
                                                    scanf("%d %d",&riga_carta2,&colonna_carta2);
                                                    if (((riga_carta2>=0) && (colonna_carta2>=0)) && ((riga_carta2<nRighe) && (colonna_carta2<nColonne )))
                                                    {
                                                       *(*(gioco+riga_carta2)+colonna_carta2) = *(*(matrice+riga_carta2)+colonna_carta2);
                                                       system("cls");
                                                       for(i=0; i<nRighe;i++)
                                                       {
                                                          for(j=0; j<nColonne; j++)
                                                              printf("%c",*(*(gioco+i)+j));
                                                          printf("\n");
                                                       }
                                                       if (*(*(gioco+riga_carta1)+colonna_carta1) != *(*(gioco+riga_carta2)+colonna_carta2))
                                                       {
                                                          tentativi--;
                                                          mosse_errate++;
                                                          punti--;
                                                          printf("Hai sbagliato, ritenta!!!\n");
                                                          sleep(1000);

  3. #3
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,465
    Chiedere genericamente dei consigli, non serve a tanto ...

    Bisogna capire, passo per passo durante l'elaborazione del progetto, cosa non sa fare o su cosa ha difficolta' ...

    E tu, che consigli gli hai dato?

    EDIT: ho visto il codice e ho ancora piu' dubbi ... qual e' il problema?

  4. #4
    Utente di HTML.it
    Registrato dal
    Jan 2007
    Messaggi
    168
    codice:
               if (tentativi == 0)
                                                          {
                                                             printf("Siamo spiacenti, hai finito i tentativi! Ritenta!!!\n\n\n");
                                                             system("pause");
                                                             system("cls");
                                                             inizio();
                                                          }            
                                                          *(*(gioco+riga_carta1)+colonna_carta1) = ' ';
                                                          *(*(gioco+riga_carta2)+colonna_carta2) = ' ';
                                                          system("cls");
                                                          for(i=0; i<nRighe;i++)
                                                          {
                                                             for(j=0; j<nColonne; j++)
                                                                printf("%c",*(*(gioco+i)+j));
                                                             printf("\n");
                                                          }              
                                                       }   
                                                       else
                                                       {
                                                          punti++;
                                                          punti++;
                                                          mosse_corrette++;
                                                          if (mosse_corrette == 30)
                                                          {
                                                             puts("Complimenti!Hai completato il gioco!\n Ora passiamo alla tua valutazione finale\n");
                                                             sleep(2000);                                        
                                                          }
                                                          else
                                                          {
                                                             system("cls");
                                                             for(i=0; i<nRighe;i++)
                                                             {
                                                               for(j=0; j<nColonne; j++)
                                                                  printf("%c",*(*(gioco+i)+j));
                                                               printf("\n");
                                                             }
                                                             printf("Bravo! Ottieni 2 PUNTI\n\n\n");
                                                             sleep(2000);    
                                                          }
                                                       }
                                                   }
                                               }                              
                                                   break;    
                                              }
                                              case '2': //Funzione di salvataggio da vedere
                                              {
                                                   puts("Salvataggio effettuato!!!");
                                                   sleep(1000);
                                                   system("cls");
                                                   break;
                                              }
                                              case '3': //Funzione di caricamento da vedere
                                              {
                                                   puts("Caricamento effettuato!!!");
                                                   sleep(1000);
                                                   system("cls");
                                                   break;
                                              }
                                          }    
                                      system("pause"); 
                                  }    
                                  break;
                             case '2':
                                  istruzioni();
                                  system("cls");
                                  break;
                             case '3':
                                  puts("GRAZIE PER AVER SCELTO MEMORY!!");
                                  sleep(2000);
                                  exit(0);
                             default: 
                                  system("cls");  
                                  puts("Lettera errata. Riprovare!"); 
                                  sleep(1000);
                                  system("cls");
                              }    
    }
    
    /*Funzione della Random */
    int numeroRandom(int lBound, int uBound)
    {
        int valore, diff;
        diff = uBound-lBound;
        if (diff != 0)
            return lBound + (rand()+time(NULL))%(diff+1);
        else
            return lBound;
    }
    /*Interfaccia grafica iniziale */
    void inizio(void)
    {
              puts("                    M   M  EEEE  M   M  OOOOO  RRRR  Y   Y");
              puts("                    MM MM  E     MM MM  O   O  R  R   Y Y ");
              puts("                    M M M  EEEE  M M M  O   O  RRRR    Y   ");
              puts("                    M   M  E     M   M  O   O  R R     Y   ");
              puts("                    M   M  EEEE  M   M  OOOOO  R  R    Y   ");  
              puts("");       
              puts("                                @@@@@@@@@@@@@                      ");                                 
              puts("                                @           @");
              puts("                                @ [1] Gioca @");
              puts("                                @ [2] Info  @"); 
              puts("                                @ [3] Esci  @");
              puts("                                @           @");
              puts("                                @@@@@@@@@@@@@                      "); 
              puts("");
              printf("                                  -> ");      
    }
    /* Aiuto richiamabile in qualsiasi momento */
    void istruzioni(void)
    {                             
                                  system("cls");
                                  
                                  
                                  puts("ISTRUZIONI\n");
                                  puts("In questo gioco devi trovare ogni coppia di carte uguali.");
                                  puts("Per trovarle vi verranno chieste le coordinate per scoprirle.");
                                  puts("Per scoprire una carta dovete digitare in questo modo:");
                                  puts("Numero riga spazio numero colonna. Per esempio: 0 0.");
                                  puts("Se indovinate vincete due punti altrimenti verrà tolto 1 punto.\n");
                                  system("pause");
                                  system("cls");
                                  main();
    }[/

  5. #5
    Utente di HTML.it
    Registrato dal
    Jan 2007
    Messaggi
    168
    il problema è nel confronto tra le due carte...inserisco le due cordinate di una carta
    poi quelle dell'altra.... secondo me ha fatto un casino... secondo voi andava fatta una struttura?

  6. #6
    Utente di HTML.it
    Registrato dal
    Jan 2007
    Messaggi
    168
    nessuno mi può aiutare???

  7. #7
    Utente di HTML.it L'avatar di Il Pazzo
    Registrato dal
    Jul 2004
    Messaggi
    1,071
    Originariamente inviato da miscialo
    il problema è nel confronto tra le due carte...inserisco le due cordinate di una carta
    poi quelle dell'altra.... secondo me ha fatto un casino... secondo voi andava fatta una struttura?
    Guarda... onestamente non ho letto nè il testo del problema nè il codice...

    però un modo semplice per fare il gioco del memory penso sia quello di creare una matrice (anche di interi) e poi inserendo le coordinate delle 2 carte (riga, colonna).... se il valore dei due elementi della matrice è uguale allora ha trovato la coppia....

    Se quello che ho scritto centra poco con il tuo problema allora scusa ma comunque prova a mettere solo il pezzo (non tutto) di codice che non ti è chiaro... e se ti posso essere d'aiuto... ben venga

  8. #8
    Utente di HTML.it
    Registrato dal
    Jan 2007
    Messaggi
    168
    dovrei fare dellle matrici dinamiche...l'utente deve decidere la difficoltà...esempio farla 2X2 4X4 8X8...come alloco i file nel vettore e poi definirli in base al range del vettore?

  9. #9
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,465
    Originariamente inviato da miscialo
    dovrei fare ...
    come alloco ...
    Ma sei tu ad avere il problema o il tuo amico ?

  10. #10
    Utente di HTML.it L'avatar di Il Pazzo
    Registrato dal
    Jul 2004
    Messaggi
    1,071
    Originariamente inviato da miscialo
    dovrei fare dellle matrici dinamiche...l'utente deve decidere la difficoltà...esempio farla 2X2 4X4 8X8...come alloco i file nel vettore e poi definirli in base al range del vettore?

    Non ho ben capito cosa intendi... comunque per fare una matrice dinamica non è molto difficile:

    codice:
    int NumCarte, *Matrice;
    
    Matrice = (int*)calloc(NumCarte,sizeof(int));
    Oppure puoi anche usare un malloc... vedi tu...

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.