Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Gioco dell'oca
Forum - C/C++ - Gioco dell'oca - Pagina 5

Pagine: [ 1 2 3 4 5 6 ] Precedente | Prossimo
Avatar
anthony015 (Member)
Pro


Messaggi: 116
Iscritto: 20/05/2011

Segnala al moderatore
Postato alle 16:11
Giovedì, 19/01/2012
potresti utilizzare un algoritmo di sorting, il seguente è l'implementazione del bubble sort per il tuo caso:
Codice sorgente - presumibilmente C/C++

  1. struct gioc appoggio;
  2.     for(i=0;i<4;i++)
  3.     for(j=i+1;j<4;j++)
  4.     {
  5.         if(giocatori[i].tiri<giocatori[j].tiri)
  6.         {
  7.             appoggio=giocatori[i];
  8.             giocatori[i]=giocatori[j];
  9.             giocatori[j]=appoggio;
  10.         }
  11.     }
  12.     printf("\nClassifica\n");
  13.     for(i=0;i<4;i++)
  14.     {
  15.         printf("Il numero %i e': %s\t%i\n", i, giocatori[i].giocatore, giocatori[i].tiri);
  16.     }


PM Quote
Avatar
konan_ 65 (Normal User)
Newbie


Messaggi: 19
Iscritto: 20/12/2011

Segnala al moderatore
Postato alle 20:54
Venerdì, 20/01/2012
grazie mille, anche se alla fine il prof mi ha detto che la classifica non è necessaria. le ultime 2 cose:
1) quando vado ad inserire i nomi dei giocatori come posso evitare che 2 giocatori inseriscano lo stesso nome?
2) quando vado a sceglire il numero dei giocatori vorrei che inserendo - si uscisse, come faccio?
questo è il codice fin'ora usato
Codice sorgente - presumibilmente C/C++

  1. {
  2.     turno = 1;
  3.     flagVittoria = 0;
  4.     char ch;
  5.     do{
  6.         printf("Inserire il numero di giocatori (Min 2, Max %d): ", COSTANTE);
  7.         fflush(stdin);
  8.         scanf("%d", &numeroGiocatori);
  9.         if (numeroGiocatori > COSTANTE){
  10.             printf("Si prega di inserire un numero di giocatori minore di %d\n", COSTANTE);
  11.         }
  12.         else if(numeroGiocatori<2){
  13.             printf("Si prega di inserire almeno 2 giocatori\n");
  14.         }        
  15.     }while(numeroGiocatori<2 || numeroGiocatori>COSTANTE);    
  16.     // Compilazione delle variabili
  17.     for (i=0; i<numeroGiocatori; i++){
  18.         printf("\nInserisci un nome per il Giocatore %d (massimo %d caratteri),\npremi INVIO per confermare o - per uscire:\n", i+1, COSTANTE);
  19.         c=0;
  20.         do{
  21.             while((ch=getche()) != '\n' && ch != '\r' && c<COSTANTE){
  22.                 if (ch == '-'){
  23.                     exit(0);
  24.                     system("pause");
  25.                 }    
  26.                 giocatori[i].giocatore[c++] = ch;
  27.             }
  28.             if(c==0){
  29.                 printf("Non hai inserito alcun nome per il giocatore %d\n", i+1);
  30.             }    
  31.         }while(c==0);
  32.         giocatori[i].giocatore[c] = '\0';        
  33.         giocatori[i].flagCasa = 0;
  34.         giocatori[i].tiri = 0;
  35.         giocatori[i].turnoCasa = 0;
  36.     }
  37. }


PM Quote
Avatar
anthony015 (Member)
Pro


Messaggi: 116
Iscritto: 20/05/2011

Segnala al moderatore
Postato alle 15:18
Sabato, 21/01/2012
io ti consiglierei di acquisire con scanf anziché con getche e poi confrontare le stringhe con strcmp
Codice sorgente - presumibilmente C/C++

  1. int flagInserimentoNome;
  2.     for(i=0;i<COSTANTE;i++)
  3.     {
  4.         flagInserimentoNome=1;
  5.         while(flagInserimentoNome)
  6.         {
  7.             printf("Inserire il nome del giocatore %i: ", i);
  8.             scanf("%s", giocatori[i].giocatore);
  9.             if(strcmp(giocatori[i].giocatore,"-")==0)
  10.                 exit(0);
  11.             flagInserimentoNome=0;
  12.             for(j=i-1;j>=0;j--)
  13.             {
  14.                 if(strcmp(giocatori[i].giocatore,giocatori[j].giocatore)==0)
  15.                 {
  16.                     flagInserimentoNome=1;
  17.                     j=-1;
  18.                 }
  19.             }
  20.         }
  21.     }


Ultima modifica effettuata da anthony015 il 21/01/2012 alle 16:21
PM Quote
Avatar
konan_ 65 (Normal User)
Newbie


Messaggi: 19
Iscritto: 20/12/2011

Segnala al moderatore
Postato alle 15:01
Giovedì, 26/01/2012
ho unsato getche per evitare così che un giocatore inserisca una stringa vuota, posso confrontare comunque 2 stringhe con strcmp anche se usto getche?
come posso far a far uscire dal gioco al momento della scelta del numero di giocatori premendo -?

PM Quote
Avatar
anthony015 (Member)
Pro


Messaggi: 116
Iscritto: 20/05/2011

Segnala al moderatore
Postato alle 15:10
Giovedì, 26/01/2012
Testo quotato

Postato originariamente da konan_ 65:
come posso far a far uscire dal gioco al momento della scelta del numero di giocatori premendo -?


è scritto nel codice sopra...

PM Quote
Avatar
konan_ 65 (Normal User)
Newbie


Messaggi: 19
Iscritto: 20/12/2011

Segnala al moderatore
Postato alle 17:51
Giovedì, 26/01/2012
no, nel codice sopra c'è la parte riguardante l'immissione del nome da parte dei giocatori, non quella che riguarda la scelta del numero di giocatori, per capirci questa

Codice sorgente - presumibilmente C/C++

  1. do{
  2.         printf("Inserire il numero di giocatori (Min 2, Max %d): ", COSTANTE);
  3.         fflush(stdin);
  4.         scanf("%d", &numeroGiocatori);
  5.         if (numeroGiocatori > COSTANTE){
  6.             printf("Si prega di inserire un numero di giocatori minore di %d\n", COSTANTE);
  7.         }
  8.         else if(numeroGiocatori<2){
  9.             printf("Si prega di inserire almeno 2 giocatori\n");
  10.         }      
  11.         else if(numeroGiocatori == '-' ){
  12.             exit(0);
  13.         }      
  14.     }while(numeroGiocatori<2 || numeroGiocatori>COSTANTE);



vorrei che anche quì, premendo il tasto -, si potesse uscire dal gioco

PM Quote
Avatar
anthony015 (Member)
Pro


Messaggi: 116
Iscritto: 20/05/2011

Segnala al moderatore
Postato alle 19:37
Giovedì, 26/01/2012
basta che sostituisci ogni volta che hai scritto confronti tra stringhe nel modo if(stringa1==stringa2) con if(strcmp(stringa1,stringa2)==0(ovviamente ogni stringa non deve essere per forza un char*, ma puoi anche mettere "stringa da comparare" o "-" come nel caso a te necessario...

PM Quote
Avatar
konan_ 65 (Normal User)
Newbie


Messaggi: 19
Iscritto: 20/12/2011

Segnala al moderatore
Postato alle 20:36
Giovedì, 26/01/2012
dici così?
Codice sorgente - presumibilmente C/C++

  1. {
  2.     turno = 1;
  3.     flagVittoria = 0;
  4.     do{
  5.         printf("Inserire il numero di giocatori e premere INVIO (Min 2, Max %d): ", COSTANTE);
  6.         fflush(stdin);
  7.         scanf("%d", &numeroGiocatori);
  8.         if (numeroGiocatori > COSTANTE){
  9.             printf("Si prega di inserire un numero di giocatori minore di %d\n", COSTANTE);
  10.         }
  11.         else if(numeroGiocatori<2){
  12.             printf("Si prega di inserire almeno 2 giocatori\n");
  13.         }      
  14.         else if(strcmp(numeroGiocatori,"-")==0){
  15.             exit(0);
  16.         }      
  17.     }while(numeroGiocatori<2 || numeroGiocatori>COSTANTE);    
  18.     // Compilazione delle variabili
  19.     compilaVariabili();
  20. }



no perchè se è così non funziona, se inserisco - me lo vede come <2 e mi dice infatti che devo inserire un numero >= a 2, se invece inserisco un numero compreso nell'intervallo il programma smette di funzionare

PM Quote
Pagine: [ 1 2 3 4 5 6 ] Precedente | Prossimo