Oppure

Loading
18/01/12 18:17
konan_ 65
grazie mille per l'aiuto della stampa del campo, ora mi manca un'ultima cosa, riuscire a stampare una classifica sulla base della posizione dei singoli giocatori, come posso fare a confrontarli tra loro e quando la posizione di un giocatore è maggiore di quella di tutti gli altri metterlo in prima posizione ecc?
Ultima modifica effettuata da konan_ 65 18/01/12 18:39
aaa
19/01/12 15:11
anthony015
potresti utilizzare un algoritmo di sorting, il seguente è l'implementazione del bubble sort per il tuo caso:
struct gioc appoggio;
    for(i=0;i<4;i++)
    for(j=i+1;j<4;j++)
    {
        if(giocatori[i].tiri<giocatori[j].tiri)
        {
            appoggio=giocatori[i];
            giocatori[i]=giocatori[j];
            giocatori[j]=appoggio;
        }
    }
    printf("\nClassifica\n");
    for(i=0;i<4;i++)
    {
        printf("Il numero %i e': %s\t%i\n", i, giocatori[i].giocatore, giocatori[i].tiri);
    }
aaa
20/01/12 19:54
konan_ 65
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
{
    turno = 1;
    flagVittoria = 0;
    char ch;
    do{
        printf("Inserire il numero di giocatori (Min 2, Max %d): ", COSTANTE);
        fflush(stdin);
        scanf("%d", &numeroGiocatori);
        if (numeroGiocatori > COSTANTE){
            printf("Si prega di inserire un numero di giocatori minore di %d\n", COSTANTE);
        }
        else if(numeroGiocatori<2){
            printf("Si prega di inserire almeno 2 giocatori\n");
        }        
    }while(numeroGiocatori<2 || numeroGiocatori>COSTANTE);    
    // Compilazione delle variabili
    for (i=0; i<numeroGiocatori; i++){
        printf("\nInserisci un nome per il Giocatore %d (massimo %d caratteri),\npremi INVIO per confermare o - per uscire:\n", i+1, COSTANTE);
        c=0;
        do{
            while((ch=getche()) != '\n' && ch != '\r' && c<COSTANTE){
                if (ch == '-'){
                    exit(0);
                    system("pause");
                }    
                giocatori[i].giocatore[c++] = ch;
            }
            if(c==0){
                printf("Non hai inserito alcun nome per il giocatore %d\n", i+1);
            }    
        }while(c==0);
        giocatori[i].giocatore[c] = '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
{
    turno = 1;
    flagVittoria = 0;
    char ch;
    do{
        printf("Inserire il numero di giocatori (Min 2, Max %d): ", COSTANTE);
        fflush(stdin);
        scanf("%d", &numeroGiocatori);
        if (numeroGiocatori > COSTANTE){
            printf("Si prega di inserire un numero di giocatori minore di %d\n", COSTANTE);
        }
        else if(numeroGiocatori<2){
            printf("Si prega di inserire almeno 2 giocatori\n");
        }        
    }while(numeroGiocatori<2 || numeroGiocatori>COSTANTE);    
    // Compilazione delle variabili
    for (i=0; i<numeroGiocatori; i++){
        printf("\nInserisci un nome per il Giocatore %d (massimo %d caratteri),\npremi INVIO per confermare o - per uscire:\n", i+1, COSTANTE);
        c=0;
        do{
            while((ch=getche()) != '\n' && ch != '\r' && c<COSTANTE){
                if (ch == '-'){
                    exit(0);
                    system("pause");
                }    
                giocatori[i].giocatore[c++] = ch;
            }
            if(c==0){
                printf("Non hai inserito alcun nome per il giocatore %d\n", i+1);
            }    
        }while(c==0);
        giocatori[i].giocatore[c] = '{parsed_message}';        
        giocatori[i].flagCasa = 0;
        giocatori[i].tiri = 0;
        giocatori[i].turnoCasa = 0;
    }
}
'; giocatori[i].flagCasa = 0; giocatori[i].tiri = 0; giocatori[i].turnoCasa = 0; } }
aaa
21/01/12 14:18
anthony015
io ti consiglierei di acquisire con scanf anziché con getche e poi confrontare le stringhe con strcmp
int flagInserimentoNome;
    for(i=0;i<COSTANTE;i++)
    {
        flagInserimentoNome=1;
        while(flagInserimentoNome)
        {
            printf("Inserire il nome del giocatore %i: ", i);
            scanf("%s", giocatori[i].giocatore);
            if(strcmp(giocatori[i].giocatore,"-")==0)
                exit(0);
            flagInserimentoNome=0;
            for(j=i-1;j>=0;j--)
            {
                if(strcmp(giocatori[i].giocatore,giocatori[j].giocatore)==0)
                {
                    flagInserimentoNome=1;
                    j=-1;
                }
            }
        }
    }

cplusplus.com/reference/clibrary/cstring/strcmp/
cplusplus.com/reference/clibrary/cstdlib/exit/
Ultima modifica effettuata da anthony015 21/01/12 15:21
aaa
26/01/12 14:01
konan_ 65
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 -?
aaa
26/01/12 14:10
anthony015
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...
aaa
26/01/12 16:51
konan_ 65
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

do{
        printf("Inserire il numero di giocatori (Min 2, Max %d): ", COSTANTE);
        fflush(stdin);
        scanf("%d", &numeroGiocatori);
        if (numeroGiocatori > COSTANTE){
            printf("Si prega di inserire un numero di giocatori minore di %d\n", COSTANTE);
        }
        else if(numeroGiocatori<2){
            printf("Si prega di inserire almeno 2 giocatori\n");
        }      
        else if(numeroGiocatori == '-' ){
            exit(0);
        }      
    }while(numeroGiocatori<2 || numeroGiocatori>COSTANTE); 


vorrei che anche quì, premendo il tasto -, si potesse uscire dal gioco
aaa
26/01/12 18:37
anthony015
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...
aaa