Primo Precedente 31 di 35 Successivo Ultimo
  1. L'avatar di Revan1985 Revan1985Revan1985 è offline #451
    19-12-08 15:55

    piccola nota...
    il menù non ti andrà mai, perchè nell'interfaccia tu gli passi un int, mentre lui compara un char...

    case '0', non accadrà mai, cosi come l'1, il 2, il 3....

    togli i '' dai case

  2. L'avatar di devilheart devilheartdevilheart è offline #452
    19-12-08 16:29

    Citazione Icewarrior Visualizza Messaggio
    Ok, credo di esserci quasi arrivato
    Mi ero dimenticato del passaggio per referenza .
    si dice passaggio per riferimento

  3. L'avatar di Icewarrior IcewarriorIcewarrior è offline #453
    19-12-08 16:47

    Citazione Revan1985 Visualizza Messaggio
    piccola nota...
    il menù non ti andrà mai, perchè nell'interfaccia tu gli passi un int, mentre lui compara un char...

    case '0', non accadrà mai, cosi come l'1, il 2, il 3....

    togli i '' dai case
    Da me va .
    A dire la verità non mi va togliendo i ' ' .... .


    Comunque volevo dire per riferimento si

    Comunque stanno sorgendo altri problemi..
    Devo fare in modo di salvare di volta in volta le varie parole che si vengono formando. Così da ogni volta controllare che le nuove parole non siano già state inserite.
    La mia idea era di creare una lista. Ogni parola nuova forma una cella nuova in questa lista.
    Quando voglio effettuare il controllo, pongo un puntatore temp = puntatore testa al primo elemento della lista, e la scorro per vedere se c'è già l'elemento.
    Ora, il problema è..Come si fa?

    Penso di dover creare per prima cosa lo struct cella :
    struct cella{
    char parmem[MAX_ELE];//struct cella indica come deve essere ogni singola cella della lista
    struct cella *next; // attua al salvataggio in memoria delle parole precedentemente scritte.
    };

    e credo che vada bene...parmem contiene la parole e next punta alla cella dopo.

    Cazzi amari arrivano quando devo formare la funzione...

    void salvare(char *parola, struct cella *testa)
    {
    nuovo=(struct cella *)malloc(sizeof(struct cella));//alloco in memoria lo spazio per una nuova cella
    nuovo->next = testa;
    testa = nuovo;
    strcpy(nuovo->parmem,parola);
    }
    Perchè non sò bene come regolarmi con gli struct...Faccio ancora un attimo fatica con * vari...
    La funzione che ho scritto sarà una ciofeca immensa, ma ve l'ho scritta per darvi una lontata idea di quello che intendo .

  4. L'avatar di Ibrahimovic 89 Ibrahimovic 89Ibrahimovic 89 è offline #454
    19-12-08 21:57

    un consiglio: indenta per bene il tuo codice e imposta dei nomi di variabile realmente chiarificativi, ci capirai MOLTO di più.

  5. L'avatar di Icewarrior IcewarriorIcewarrior è offline #455
    19-12-08 22:30

    Citazione Ibrahimovic 89 Visualizza Messaggio
    un consiglio: indenta per bene il tuo codice e imposta dei nomi di variabile realmente chiarificativi, ci capirai MOLTO di più.
    Vi giuro sono realmente niubbo. Cosa vuole dire indentare il codice?
    Renderlo visivamente e funzionalmente migliore?

  6. L'avatar di Revan1985 Revan1985Revan1985 è offline #456
    19-12-08 22:41

    si...

  7. L'avatar di Ly89 Ly89Ly89 è offline #457
    20-12-08 01:08

    Citazione Icewarrior Visualizza Messaggio
    Vi giuro sono realmente niubbo. Cosa vuole dire indentare il codice?
    Renderlo visivamente e funzionalmente migliore?
    si, e quindi ogni blocco deve essere indentato (tabulato o comunque spaziato) così che a colpo d'occhio puoi vedere dove inizia e dove finisce.. nomi delle variabili più significativi contribuiscono ad una migliore leggibilità complessiva

  8. L'avatar di Revan1985 Revan1985Revan1985 è offline #458
    20-12-08 01:39

    se vedi vecchi ost in questo thread, o il mio di poco fa, capisci come è una tabulazione...

    ossia fare in modo che si capisca dove finisce, e dove inizia un gruppo di { }

    [vale anche se non ci sono per via di una sola istruzione ^^ ]

  9. L'avatar di Ly89 Ly89Ly89 è offline #459
    20-12-08 01:55

    Citazione Ly89 Visualizza Messaggio
    Codice:
    interativo:
    
    int funz(int num)
    {
      int s=0;
      for(int i=num;i>0;i--)
        s=s+i;
    
      return s;
    }
    
    ricorsiva:
    
    int funz(int num)
    {
      if(num>0)
        return num+funz(num--);
      else
        return 0;
    }

    ti cito un mio vecchio post semplicissimo per darti un esempio di semplice indentazione.... ho usato solo uno spazio, potevo anche tabulare volendo

  10. L'avatar di Ibrahimovic 89 Ibrahimovic 89Ibrahimovic 89 è offline #460
    20-12-08 03:39

    Esempio di indentazione sul tuo codice:

    Codice:
    struct cella
    {
      /* struct cella indica come deve essere ogni singola cella della lista  */
      char parmem[MAX_ELE];  
      struct cella *next;  
      /* attua al salvataggio in memoria delle parole precedentemente scritte */    
    }; 
    
      
    void salvare(char *parola, struct cella *testa)
    {
      /* allocazione di una nuova cella in memoria */
      nuovo=(struct cella *)malloc(sizeof(struct cella));
      nuovo->next = testa;
      testa = nuovo;
      strcpy(nuovo->parmem,parola);
     }
    Usa /*commento*/ per commentare al posto di //commento

    I motivi sono che con il secondo commenti solo una riga, non sai dove finisce, non è riconosciuto da tutti i compilatori C e non è standard.

  11. L'avatar di _Tommo_ _Tommo__Tommo_ è offline #461
    20-12-08 09:06

    Beh mi pare davvero eccessivo

    // va bene sempre, anzi è meglio se intendi commentare. In ogni caso è l'uso più comune...

  12. L'avatar di devilheart devilheartdevilheart è offline #462
    20-12-08 09:42

    Citazione Ibrahimovic 89 Visualizza Messaggio
    [/code]Usa /*commento*/ per commentare al posto di //commento

    I motivi sono che con il secondo commenti solo una riga, non sai dove finisce, non è riconosciuto da tutti i compilatori C e non è standard.
    non diciamo cazzate. // si sa benissimo che commenta solo la riga dove è messo; è al 100% standard e deve essere riconosciuto da tutti i compilatori. il dettaglio mancante è che // è un commento di C++, non di C

  13. L'avatar di Icewarrior IcewarriorIcewarrior è offline #463
    20-12-08 13:13

    Ok ho capito cosa intendete...Il fatto è che copiando il codice nello spoiler, viene tutto come schiacciato a sinistra . Nel compilatore è messo molto meglio .

    Comunque..qualcuno saprebbe dirmi qualcosa sul mio problema?
    Spoiler:
    Devo fare in modo di salvare di volta in volta le varie parole che si vengono formando. Così da ogni volta controllare che le nuove parole non siano già state inserite.
    La mia idea era di creare una lista. Ogni parola nuova forma una cella nuova in questa lista.
    Quando voglio effettuare il controllo, pongo un puntatore temp = puntatore testa al primo elemento della lista, e la scorro per vedere se c'è già l'elemento.
    Ora, il problema è..Come si fa?

    Penso di dover creare per prima cosa lo struct cella :
    struct cella{
    char parmem[MAX_ELE];//struct cella indica come deve essere ogni singola cella della lista
    struct cella *next; // attua al salvataggio in memoria delle parole precedentemente scritte.
    };

    e credo che vada bene...parmem contiene la parole e next punta alla cella dopo.

    Cazzi amari arrivano quando devo formare la funzione...

    void salvare(char *parola, struct cella *testa)
    {
    nuovo=(struct cella *)malloc(sizeof(struct cella));//alloco in memoria lo spazio per una nuova cella
    nuovo->next = testa;
    testa = nuovo;
    strcpy(nuovo->parmem,parola);
    }
    Perchè non sò bene come regolarmi con gli struct...Faccio ancora un attimo fatica con * vari...
    La funzione che ho scritto sarà una ciofeca immensa, ma ve l'ho scritta per darvi una lontata idea di quello che intendo .


    EDIT : Ahhh cazzo...Ero ignaro delle possibilità infinite fornite da gr .
    Questo è il codice come l'ho scritto io:
    Spoiler:

    Codice:
    /*
    
    
    
    
    
    Prima di partire con la scrittura del codice c, ho provveduto a studiare per bene il procedimento
    che avrei dovuto attuare per la buona riuscita del programma.
    Per iniziare ho voluto chiedere il nome ai due giocatori. Il nome verrà salvato all'interno di una variabile
    giocatore, che ho definito con uno struct all'inizio. Oltre al nome, questa variabile conterrà anche il punteggio.
    Chiedo poi al giocatore 1 di inserire la prima parola, che viene salvata all'interno di parola.
    A questo punto si entra in una iterazione, che mi permette di mostrare il menu' ogni volta che un'operazione 
    viene completata. Tramite uno switch potrò compiere una diversa azione in base alla scelta del giocatore.
    L'interfaccia è contenuta nella funzione interfaccia(). 
    Non vi è nessun controllo sulla correttezza delle parole inserite dai giocatori, dato che si presuppone che 
    le parole inserite siano presenti sul dizionario, e non inventate. Ho inserito inoltre l'opportunità di poter passare il turno.
    Se i giocatori riescono ad inserire una lettera, allora riceveranno 1 punto, se la tolgono ne perderanno una, se passano
    riceveranno una penalità maggiore. Se infine propongono una parola già scritta, la penalità sarà di 1 punto per ogni lettera della nuova parola.
    Per controllare se la nuova parola non fosse già stata scritta, ho creato una lista dinamica, in cui viene aggiunta una cella
    ogni qualvolta si ha una nuova parola.
    Vi è un punteggio massimo da raggiungere, e il giocatore che lo raggiunge per primo ottiene la vittoria.Il punteggio da raggiungere
    è 10.
    Quando un giocatore vuole aggiungere una parola, semplicemente gli verrà chiesto in quale posizione inserire la nuova lettera,
    e quale lettera inserire. 1 punto verrà aggiungo al giocatore e si proseguirà con la nuova parola.
    Se invece si vuole togliere una lettera, verrà chiesta la posizione della lettera e verrà tolto 1 punto.
    Alla fine vengono controllati i punteggi dei giocatori, e se nessuno dei due ha raggiunto il punteggio che ho stabilito,
    allora il ciclo ricomincerà, cambiando però il turno.
    
    Quando devo passare valori alle funzioni, che dovranno essere modificati, allora uso il passaggio per indirizzo
    e non per valore, perchè quest'ultimo mi permetterebbe solo di usare ciò che gli passo, ma non di modificarlo.
    
    Cambiamento di turno: il cambiamento di turno viene gestito dalla variabile turno. La inizializzo a 2, e ogni volta effettuo un controllo
    se turno%2==0 ( cioè è pari), allora tocca al giocatore 2. Viceversa tocca al secondo. E finita la mossa del giocatore, turno viene aumentato di 1.
    Questo è turnoUp. turnoDown invece viene utilizzato quando si decide di togliere una lettera, e quindi bisogna togliere 1 punto, non aggiungerlo.
    
    Ogni volta che si ha una nuova parola, devo provvedere a salvarla in memoria. Questo per permettere il controllo sulle nuove parole inserite,
    nel caso siano già state inserite in precedenza.
    Per memorizzare, mi avvalgo di una lista dinamica. Ogni nuova parola sarà una nuova cella in questa lista. Ogni controllo verrà effettuato
    scansionando questa lista con un puntatore temp. Nel caso la nuova parola sia uguale a una già inserita in precedenza, allora 
    verranno tolti tanti punti al giocatore quanto il numero delle lettere della nuova parola.
    
    Per tenere conto delle mosse totali effettuate, semplicemente pongo una variabile mosse = 0. Poi faccio in modo che 
    alla fine di ogni iterazione del ciclo while nel main, essa aumenti di 1. Alla fine, quando uno dei due giocatori
    raggiunge i 10 punti, allora mostro la variabile.
    
    Il codice verrà spiegato più approfonditamente mentre lo si legge.
    */
    
    #include <stdlib.h>
    #include <stdio.h>
    #include <string.h>
    #define MAX_ELE 30
    
    struct giocatore{
           char nome[MAX_ELE];//Abbiamo qua lo struct giocatore
           int punteggio;// che conterr&#224; nome e punteggio dei giocatore
           };
    struct cella{
           /*struct cella indica come deve essere ogni singola cella della lista*/
           char parmem[MAX_ELE];
           struct cella *next;  /* attua al salvataggio in memoria delle parole precedentemente scritte.*/
           };  
    struct cella *testa = NULL;
    struct cella *nuovo = NULL;         
    struct giocatore a,b;   
    /* Ottengo cos&#236; i 2 giocatori. */ 
    
    int scelta; 
    int i , turno=2,mosse=0; // turno mi sar&#224; utile a controllare l'alternarsi dei turni, mosse per calcolare il totale delle mosse     
    char parola[MAX_ELE], sup[MAX_ELE]; 
     
    void salvare(char *, struct cella *);
    
    void togliLettera(char *);//void perch&#232; non c'&#232; alcun return, e char * perch&#232; dovr&#242; passare alla funzione la stringa parola, per indirizzo.
    void aggiungiLettera(char *);// come sopra.
    void saltaTurno(int *, struct giocatore *, struct giocatore *);
    
    int interfaccia(int,int, int *);//Creo una funzione per l'interfaccia di gioco, in modo da risparmiare spazio nel main.     
    void vincitore(int *,struct giocatore *, struct giocatore *,int *);
    void fturnoUp(int *,struct giocatore *,struct giocatore *);
    void fturnoDown(int *,struct giocatore *,struct giocatore *);
    
    int main()
    {
        a.punteggio=0;
        b.punteggio=0;// entrambi i giocatori partono con punteggio 0.
        printf("Nome del giocatore 1 : ");
        for(i=0;(a.nome[i]=getchar())!='\n';i++)//Semplicemente chiedo i nomi ai 2 giocatori, e li memorizzo
        ;                                  //all'interno dell'array di caratteri che ho creato nello struct giocatore
        a.nome[i]='\0';
        printf("Nome del giocatore 2 : ");
        for(i=0;(b.nome[i]=getchar())!='\n';i++)
        ;
        b.nome[i]='\0';
        printf("Primo giocatore, inserisci la parola : ");
        for(i=0;(parola[i]=getchar())!='\n';i++)//E ora salvo anche la parola. 
        ;
        parola[i]='\0';
        while(1 && (a.punteggio!= 2 && b.punteggio!=2 ))//entro in un ciclo sempre vero, che mi permette di mostrare il men&#249; ogni qual volta iene portata a termine una mossa
        {                                               //e di controllare che non sia stato raggiunto il punteggio massimo
                system("cls");        
                printf("\n\t\t===================================================\n");
                printf("\n\t\t===================================================\n");
                printf("\n\t\tParola attuale : %s.\n",parola);
                printf("\t\tE\' il turno del giocatore %d.\n",turno);//Approfitto dell'oscillazione della variabile turno tra 1 e 2, per indicare a chi tocca giocare
                switch(interfaccia(a.punteggio,b.punteggio,&scelta))//Mostro cos&#236; l'interfaccia(commento nella funzione)
                {
                             case '1':                            
                                  aggiungiLettera(parola);//nel caso prema 1, allora entrer&#224; in gioco la funzione che si occupa dell'aggiunta di una lettera
                                  printf("%s.\n",testa->parmem);
                                  system("pause");
                                  break;
                             case '2':
                                  togliLettera(parola);// con 2 si potr&#224; togliere una lettera                              
                                  break;     
                             case '3':
                                  saltaTurno(&turno, &a, &b);
                                  break;      
                             case '0':
                                  exit(0);
                                  system("pause");
                                  break;     
                                  
                }
                mosse++;    
        } 
        vincitore(&turno, &a,&b,&mosse);   
        system("pause");
        return 0;
    }
    /*
    aggiungiLettera()
    funzione che entra in gioco nel caso il giocatore decida di aggiungere una lettera alla parola.Il funzionamento 
    &#232; spiegato nel codice.Alla fine richiamo fturnoUp(), per agire sui punteggi e sul turno.
    
    Parametri in ingresso:
    la stringa parola, perch&#232; devo mostrarla al giocatore.
    
    Parametri restituiti:
    Nessuno.                              
    */
    void aggiungiLettera(char *parola)
    {
         system("cls");
         int i=0,j=0,posiz;
         char let;
         /*
         i,j : utili per passare nelle varie celle delle stringhe.
         posiz : posizione nella quale voglio inserire la lettera.
         let : lettera da aggiungere alla parola nella posizione desiderata.
         */
         for(i=0;parola[i]!='\0';i++)
         {
                          printf("(%d)",i+1);     //In questo modo mostro le varie lettere, e numero i vari
                          printf("%c",parola[i]); //spazi nei quali &#232; inseribile la nuova lettera.                                          
         }
         printf("(%d)\n",i+1);
         do{
                              printf("\nIn quale posizione vuoi aggiungere una lettera?\n");
                              scanf("%d",&posiz);//mi salvo cos&#236; la posizione dove vuole aggiungere una lettera
         
         }while(posiz<1 || posiz>(i+1));//controllo sulla validit&#224; dell'inserimento
         do{
                        printf("Quale lettera vuoi aggiungere?\n");
                        let=getch();// e la lettera da aggiungere
         }while(let<65 || let >122);// altro controllo per l'inserimento della lettera
         for(i=0;parola[i]!='\0';i++,j++)
         {          
                          if(i==(posiz-1))             //se la posizione &#232; quella scelta   
                          {                             
                              sup[j]=let;  // utilizzo una stringa di supporto. Vi copio mano mano le lettere di
                              j++;         // parola. Ma quando arrivo alla lettera da aggiungere, l'aggiungo nella 
                          }                //fino a che la sto trattando con una lettera della parola                                               // stringa di supporto, e vado avanti di 1, continuando a copiare le altre lettere di parola.
                          sup[j]=parola[i];      //In questo modo stringa conterr&#224; la vecchia parola + la nuova lettera.                                
         }
         if(i==(posiz-1))             //se la posizione &#232; quella scelta   
         {                             
                sup[j]=let;  // Riscrivo il tutto un' ulteriore volta, poich&#232; mi serve nel caso l'inserimento debba avvenire
                j++;         // in fondo alla parola. in tal caso, l'if dentro il while non viene considerato, perch&#232; il ciclo while termina prima.
         }   
         sup[j]='\0';
         strcpy(parola,sup); //E alla fine copio la nuova parola ottenuta in parola
         fturnoUp(&turno, &a , &b);//vado ad agire sul turno, cambiando il punteggio dei giocatori e cambiando il valore di turno                    
         salvare(parola, testa);
    }
    /*
    togliLettera()
    funzione che entra in gioco nel caso l'utente scelga di togliere una lettera alla parola.
    Viene mostrata la parola al giocatore. Egli sceglie la posizione della lettera e questa viene cancellata
    (procedimento spiegato nel codice).Alla fine viene richiamata la funzione fturnoDown(), in modo da modificare i punteggi e il turno,e anche
    salvare(), in modo da conservare in memoria anche questa nuova parola.
    
    Parametri passati:
    La stringa parola, perch&#232; devo mostrarla al giocatore.
    
    Parametri restituiti:
    Nessuno.        
    */
    void togliLettera(char *parola)
    {
         system("cls");
         int num,j=0,i=0;
         /*
         num : Questa variabile mi sar&#224; utile ad immaggazinare il numero della lettera che voglio cancellare.
         j,i : Utilizzate per scorrere le varie celle delle stringhe sup e parola.
         */
         printf("Parola :   ");
         for(i=0;parola[i]!='\0';i++)
         {
                                      printf("%c",parola[i]);
         }/*mostro la parola al giocatore.*/
         printf("\n");
         printf("Numero della lettera da togliere : ");
         scanf("%d",&num); 
         /*Dovr&#224; scegliere il numero della lettera che desidera togliere e lo salvo in una variabile */
         for(i=0,j=0;parola[i]!='\0';i++,j++)
         {
                         if(i == (num-1))/*quando parola[i] contiene la parola da togliere, allora faccio i++. In pratica salto la cella che contiene la parola*/
                         i++;
                                            
                         sup[j] = parola[i];/*E salvo tutto sulla stringa di supporto , senza la lettera che volevamo eliminare.*/                                       
         }
         sup[j]='\0';                                                                                                                                        
         strcpy(parola,sup);            /* cos&#236; parola conterr&#224; la nuova parola */
         fturnoDown(&turno, &a , &b);   /* e vado all'istruzione del turno per togliere punti */
         salvare(parola, testa);
    }
    /*
    saltaTurno()
    funzione che permette all'utente di saltare il turno, nel caso non riesca a trovare una nuova parola.
    Il giocatore riceve per&#242; una penalit&#224; di 3 punti.
    Si basa sul valore di turno per decidere di chi,tra i 2 giocatori, &#232; il turno. Capito questo,
    si va nel suo struct giocatore, in punteggio, e gli si sottrae 3. Alla fine turno viene modificato in modo
    che spetti all'altro giocatore.
    
    Parametri passati:
    turno, per riferimento, utile come spiegato sopra.
    2 struct giocatore, che indicano i 2 giocatori. Agiremo infatti sul valore punteggio di ognuno di essi.
    
    Parametri restituiti : Nessuno.                    
    */
    void saltaTurno(int *turno, struct giocatore *x, struct giocatore *y)
    {
         if((*turno)%2==0)
         {
                       y->punteggio -= 3;
                       (*turno)--;
         }
         else
         {
             x->punteggio -= 3;
             (*turno)++;
         }     
    }
    /*
    interfaccia()
    Serve a richiamare di volta in volta l'interfaccia del gioco, dove &#232; possibile effettuare le varie scelte.
    
    Parametri in ingresso : 
    x e y indicano i punteggi dei 2 giocatori. Infatti nel main richiamo la funzione passandole come valori a.punteggio e b.punteggio.
    Infine scelta &#232; un int che viene passato per riferimento alla funzione, che servir&#224; ad immaggazinare la scelta dell'utente.
    
    Parametri restituiti:
    scelta, che indica appunto la scelta effettuata dal giocatore nel men&#249; di gioco.          
    */
    int interfaccia(int x,int y, int *scelta)
    {
        printf("\t\t===================================================\n");
        printf("\t\t===================================================\n");
        printf("\t\t\n\t\t               MENU DI GIOCO                      \n");
        printf("\t\t1) Aggiungi una lettera alla parola(+1 punto).\n");
        printf("\t\t2) Togli una lettera alla parola (-1 punto).\n");
        printf("\t\t3) Passa il turno ( -3 punti).\n");
        printf("\t\t0) Esci.\n\n");
        printf("\t\tPunteggio giocatore 1 - %s : %d\\10 \n\t\tPunteggio giocatore 2 - %s : %d\\10 \n",a.nome,x,b.nome,y);
        printf("\t\t===================================================\n");
        printf("\t\t===================================================\n");
        (*scelta) = getch();
        return (*scelta);
        /*Mostro l'interfaccia di gioco. Ho scritto int interfaccia, perch&#232; la funzione deve ritornare un valore intero,
        cio&#232; scelta, che sar&#224; poi utilizzato nello switch. x e y in questo caso sono utili per dare a ogni chiamata
        dell'interfaccia il resoconto dei punti. prima infatti ho richiamato interfaccia, passandogli come x e y  i punteggi dei due giocatori. */
    }
    
    void salvare(char *parola, struct cella *testa)
    {
         /* allocazione di una nuova cella in memoria */
         nuovo=(struct cella *)malloc(sizeof(struct cella));
         nuovo->next = testa;
         testa = nuovo;
         strcpy(nuovo->parmem,parola);
    }
    /*
    vincitore()
    funzione posta alla fine del programma, che serve ad indicare chi dei due &#232; il vincitore. Si basa sul valore assunto in quel momento da turno.
    
    Paremetri in ingresso:
    turno, passato per indirizzo, che mi &#232; utile per dire chi ha vinto.
    x e y, due struct giocatore che mi permettono di indicare il nome dei due giocatori.
    mosse, per indirizzo, che tiene conto delle mosse  totali effettuate
    
    Parametri restituiti:
    Nessuno          
    */
    void vincitore(int *turno, struct giocatore *x,struct giocatore *y,int *mosse)
    {
         system("cls");
         if((*turno)%2 != 0)
         {
                       printf("\t\t===================================================\n");
                       printf("\t\t===================================================\n");
                       printf("\t\tIl giocatore n.%d e\' il vincitore!!!!!\n",(*turno)+1);
                       printf("\n\t\tMosse totali nel gioco : %d.\n",*mosse);
                       printf("\n\t\tCongratulazioni %s!!!",y->nome);
         }
         if((*turno)%2 == 0)
         {
                       printf("\t\t===================================================\n");
                       printf("\t\t===================================================\n");
                       printf("\t\tIl giocatore n.%d e\' il vincitore!!!!!\n",(*turno)-1);
                       printf("\n\t\tMosse totali nel gioco : %d.\n",*mosse);
                       printf("\n\t\tCongratulazioni %s!!!",x->nome);
         }
         
    }
    /*
    fturnoUp()
    funzione che mi permette di alternare il turno tra i due giocatori,e nello stesso momento aumentare i punteggi dei giocatori.
    Viene richiamata se l'utente ha scelto di aggiungere una lettera.
    
    Parametri passati alla funzione:
    turno, passato per indirizzo, che mi &#232; utile per gestire l'alternanza.
    2 struct giocatore, passate per indirizzo perch&#232; devo modificarne il punteggio.
    
    Parametri restituiti:
    Nessuno           
    */          
    void fturnoUp(int *turno, struct giocatore *x, struct giocatore *y)
    {
        
                    if((*turno)%2 == 0)
                   {
                                 y->punteggio +=  1;
                                 (*turno)--;//quindi il turno diventa dispari, verificando alla prossima iterazione l'else               
                   }    
                   else
                   {
                       x->punteggio +=  1;
                       (*turno)++;//e il turno ridiventa pari               
                   }    
    }   
    /*
    fturnoDown()
    funzione che mi permette di alternare il turno tra i due giocatori,e nello stesso momento diminuire i punteggi dei giocatori.
    Viene richiamata se l'utente ha scelto di togliere una lettera.
    
    Parametri passati alla funzione:
    turno, passato per indirizzo, che mi &#232; utile per gestire l'alternanza.
    2 struct giocatore, passate per indirizzo perch&#232; devo modificarne il punteggio.
    
    Parametri restituiti:
    Nessuno           
    */     
    void fturnoDown(int *turno, struct giocatore *x, struct giocatore *y)
    {
        
                   if((*turno)%2 == 0)
                   {
                                 y->punteggio -=  1;
                                 (*turno)--;
                        /*quindi il turno diventa dispari, verificando l'else,alla prossima iterazione */             
                   }    
                   else
                   {
                       x->punteggio -=  1;
                       (*turno)++;
                       /* e cos&#236; il turno ridiventa pari */               
                   }                          
    }

    Dai, nessuno nasce imparato.
    Cavolo per&#242;...Devo assolutamente capire come risolvere il mio problema..


    EDIT: Ok per ora questo problema credo di averlo risolto. Mi sono fatto un po' di passaggi su un quaderno, e ho capito che devo avere
    void(..., struct cella **testa)
    cambiando tutto ci&#242; che ne consegue .
    Dai piano piano sto migliorando .

  14. L'avatar di sydarex sydarexsydarex è offline #464
    20-12-08 16:30

    Mmh, devo ripassare il C per la seconda fase delle Olimpiadi di Informatica - alla prima ho fatto 20/20 alle prove di Programmazione, quindi ci tengo a mangiarmi pure la seconda, ma il mio C è arrugginito.
    Guida italiana/inglese in cui vengano ben spiegati puntatori, array/matrici, file (con ben spiegati intendo le particolarità e le sfumature più fini, i concetti di base li conosco fin troppo bene)?

    Grazie grazie XD

  15. L'avatar di Ly89 Ly89Ly89 è offline #465
    21-12-08 01:00

    alcuni a suo tempo avevano consigliato questo

    http://www.hoepli.it/libro.asp?ib=97...00022007002002

 
Primo Precedente 31 di 35 Successivo Ultimo