Oppure

Loading
26/01/12 19:36
konan_ 65
dici così?
{
    turno = 1;
    flagVittoria = 0;
    do{
        printf("Inserire il numero di giocatori e premere INVIO (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(strcmp(numeroGiocatori,"-")==0){
            exit(0);
        }      
    }while(numeroGiocatori<2 || numeroGiocatori>COSTANTE);    
    // Compilazione delle variabili
    compilaVariabili();
} 


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
aaa
26/01/12 20:14
anthony015
te lo vede minore di 2 perché tu acquisisci un %d, quindi, un numero, per potere confrontare il "-" devi acquisire una stringa o un carattere, poi verificare che non sia "-" per continuare e in tal caso convertirlo ad intero...
aaa
26/01/12 22:32
konan_ 65
ho l'impressione di stare per chiedere una cosa molto stupida, ma come trasformo un carattere in intero?
aaa
26/01/12 22:44
anthony015
per convertire un singolo carattere ad un numero, basta fare:
char carattere='5';
int numero=carattere-48;

gli interi e i char vengono trattati nello stesso modo, per cui in base alla tabella ascii(dove lo 0 equivale al carattere numero 48), basta eseguire l'operazione di sopra...

se invece devi convertire una stringa ad un intero puoi usare atoi(cplusplus.com/reference/clibrary/cstdlib/atoi/)
aaa
26/01/12 23:01
konan_ 65
ok, ho ufficialmente finito!! grazie mille per l'aiuto! senza non ci sarei riuscito!
posto il codice completo, non sia mai dovesse servire a qualcuno in futuro, o semplicemente qualcuno voglia farci una partita!!

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define COSTANTE 20
#define RIGHE 8
#define COLONNE 8

struct gioc{
    char giocatore[COSTANTE];
    int flagCasa;
    int turnoCasa;
    int tiri;
} giocatori[4];

void inizioGioco();
void compilaVariabili();
void fase2();
void domanda();
void lancioDado();
void speciali();
void casa();
void pozzo();
void prigione();
void oca();
void ponte();
void labirinto();
void superato();
void vittoria();
void nuovaPartita();

char risposta;
int turno;
int numeroGiocatori;
int dado;
int i;
int j;
int r;
int c;
int flagVittoria;

main()
{
    printf("Gioco Dell\'Oca\n");
    // Cilo per rendere il gioco infinito
    while (1){
        inizioGioco();       
        // Controllo vittoria
        while(giocatori[i].tiri < 63){
            if(flagVittoria == 0){
                fase2();
                // Ciclo for per far giocare i vari giocatori
                for (i=0; i<numeroGiocatori; i++){
                    domanda();
                    // Controllo che il flag che controlla le caselle speciali sia attivo o meno
                    if (giocatori[i].flagCasa == 1){
                        speciali();
                    }
                    else{//Se il flag casa è positivo
                        lancioDado();
                        speciali();
                        // Stampa posizione
                        printf("%s si trova nella casella %d\n\n",giocatori[i].giocatore,giocatori[i].tiri);
                    }   
                    if (giocatori[i].tiri == 63){// Controllo vittoria
                        vittoria();
                    }            
                }  
            }
            else{
                break;
            }    
        }
    nuovaPartita();          
    } 
    system("pause");
    return 0;
}  

/*inizioGioco()
funzione che svolge le fasi preliminari del gioco, facendo scegliere il numero dei giocatori, compreso tra un minimo di 2 giocatori
e un massimo variabile in base ad una costante precedentemente dichiarata.
in caso di numero di giocatori non immesso, oppure minore o maggiore del dovuto, fa ripetere l'operazione, in caso di pressione del
tasto - fa uscire dal gioco*/
void inizioGioco()
{
    char numeroGiocatori1;
    turno = 1;
    flagVittoria = 0;
    do{
        printf("Inserire il numero di giocatori e premere INVIO (Min 2, Max %d): ", COSTANTE);
        fflush(stdin);
        scanf("%c", &numeroGiocatori1);
        if(numeroGiocatori1 != '-'){
            numeroGiocatori = numeroGiocatori1-48;
            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{
            exit(0);
        }             
    }while(numeroGiocatori<2 || numeroGiocatori>COSTANTE);    
    // Compilazione delle variabili
    compilaVariabili();
}  

/*compilaVariabili
funzione che si occupa di compilare tutte le variabili relative ai vari giocatori, per quanto riguarda il nome dei giocatori,
in caso di nome non immesso, o uguale a quello di un'altro giocatore, fa ripetere l'immissione*/
void compilaVariabili()
{
    char ch;
    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);
            }
            for(j=i-1;j>=0;j--){
                if(strcmp(giocatori[i].giocatore,giocatori[j].giocatore)==0){
                    printf("Hai inserito lo stesso nome di un altro giocatore, riprova!\n");
                    j=-1;
                    c=0;
                }
            }
        }while(c==0);
        giocatori[i].giocatore[c] = 'ok, ho ufficialmente finito!! grazie mille per l'aiuto! senza non ci sarei riuscito!

posto il codice completo, non sia mai dovesse servire a qualcuno in futuro, o semplicemente qualcuno voglia farci una partita!!

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define COSTANTE 20
#define RIGHE 8
#define COLONNE 8

struct gioc{
    char giocatore[COSTANTE];
    int flagCasa;
    int turnoCasa;
    int tiri;
} giocatori[4];

void inizioGioco();
void compilaVariabili();
void fase2();
void domanda();
void lancioDado();
void speciali();
void casa();
void pozzo();
void prigione();
void oca();
void ponte();
void labirinto();
void superato();
void vittoria();
void nuovaPartita();

char risposta;
int turno;
int numeroGiocatori;
int dado;
int i;
int j;
int r;
int c;
int flagVittoria;

main()
{
    printf("Gioco Dell\'Oca\n");
    // Cilo per rendere il gioco infinito
    while (1){
        inizioGioco();       
        // Controllo vittoria
        while(giocatori[i].tiri < 63){
            if(flagVittoria == 0){
                fase2();
                // Ciclo for per far giocare i vari giocatori
                for (i=0; i<numeroGiocatori; i++){
                    domanda();
                    // Controllo che il flag che controlla le caselle speciali sia attivo o meno
                    if (giocatori[i].flagCasa == 1){
                        speciali();
                    }
                    else{//Se il flag casa è positivo
                        lancioDado();
                        speciali();
                        // Stampa posizione
                        printf("%s si trova nella casella %d\n\n",giocatori[i].giocatore,giocatori[i].tiri);
                    }   
                    if (giocatori[i].tiri == 63){// Controllo vittoria
                        vittoria();
                    }            
                }  
            }
            else{
                break;
            }    
        }
    nuovaPartita();          
    } 
    system("pause");
    return 0;
}  

/*inizioGioco()
funzione che svolge le fasi preliminari del gioco, facendo scegliere il numero dei giocatori, compreso tra un minimo di 2 giocatori
e un massimo variabile in base ad una costante precedentemente dichiarata.
in caso di numero di giocatori non immesso, oppure minore o maggiore del dovuto, fa ripetere l'operazione, in caso di pressione del
tasto - fa uscire dal gioco*/
void inizioGioco()
{
    char numeroGiocatori1;
    turno = 1;
    flagVittoria = 0;
    do{
        printf("Inserire il numero di giocatori e premere INVIO (Min 2, Max %d): ", COSTANTE);
        fflush(stdin);
        scanf("%c", &numeroGiocatori1);
        if(numeroGiocatori1 != '-'){
            numeroGiocatori = numeroGiocatori1-48;
            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{
            exit(0);
        }             
    }while(numeroGiocatori<2 || numeroGiocatori>COSTANTE);    
    // Compilazione delle variabili
    compilaVariabili();
}  

/*compilaVariabili
funzione che si occupa di compilare tutte le variabili relative ai vari giocatori, per quanto riguarda il nome dei giocatori,
in caso di nome non immesso, o uguale a quello di un'altro giocatore, fa ripetere l'immissione*/
void compilaVariabili()
{
    char ch;
    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);
            }
            for(j=i-1;j>=0;j--){
                if(strcmp(giocatori[i].giocatore,giocatori[j].giocatore)==0){
                    printf("Hai inserito lo stesso nome di un altro giocatore, riprova!\n");
                    j=-1;
                    c=0;
                }
            }
        }while(c==0);
        giocatori[i].giocatore[c] = '{parsed_message}';        
        giocatori[i].flagCasa = 0;
        giocatori[i].tiri = 0;
        giocatori[i].turnoCasa = 0;
    }
}     

/*fase2()
funzione entro la quale viene svolta la stampa del turno e del campo di gioco con la posizione dei giocatori*/
void fase2()
{
    printf("Turno %d\n", turno);
    turno++;
    //Stampa campo
    int flagCiclo=0;
    int numero = 0;
    int campo[RIGHE][COLONNE];
    //Creazione campo
     for (r=0; r<RIGHE; r++){
         for (c=0; c<COLONNE; c++){
             campo[r][c] = numero;
             ++numero;
         }
     }    
    
    //Stampa Campo
    for (r=0; r<RIGHE; r++){
        printf("\n");
        for (c=0; c<COLONNE; c++){
            for (i=0; i<numeroGiocatori; i++){
                if (giocatori[i].tiri == campo[r][c]){
                    printf("%7s", giocatori[i].giocatore);
                    flagCiclo=1;
                }
                else if(i==numeroGiocatori-1&&flagCiclo==0){
                    printf("%7d", campo[r][c]);
                }
            }
            flagCiclo=0;
        }
    } 
} 

/*domanda
funzione che chiede ogni turno se il giocatore vuole continuare il gioco o uscire*/
void domanda()
{
    do{
        printf("\n"); 
        printf("Tocca a %s\nCominciare il turno o uscire? (C/E)\n", giocatori[i].giocatore);
        fflush(stdin);
        scanf("%c", &risposta);
        if(risposta == 'C' || risposta == 'c'){
            printf("%s inizia!\n", giocatori[i].giocatore);  
            return;          
        }  
        else if(risposta == 'E' || risposta == 'e'){
            exit(1);
        }
        else{
            printf("Il carattere inserito e' diverso sia da C che da E, si prega di riprovare\n");
        }    
    }while(risposta != 'E' || risposta != 'e' || risposta != 'C' || risposta != 'c');  
}

/*lancioDado
funzione che viene utilizzata per ricreare il lancio di un dado*/
void lancioDado()
{
    dado = 0;
    srand(time(NULL));
    dado = rand() % 6;
    dado++;
    printf("Il lancio del dado ha prodotto la faccia %d\n",dado);
    // Spostamento giocatore
    giocatori[i].tiri = giocatori[i].tiri + dado;
}    

/*speciali
Funzione che controlla se un giocatore sia finito o meno in una casella speciale e lo reindirizza alla funzione corrispondente alla casella*/
void speciali()
{
    //Controllo casella Casa
    if (giocatori[i].tiri == 19){
        casa();
    }    
    else if(giocatori[i].tiri == 39){//Controllo casella pozzo
        pozzo();
    }    
    else if (giocatori[i].tiri == 52){//Controllo casella prigione
        prigione();
    }    
    //Controllo caselle oca
    for(r=5; r<63; r=r+9){
        for(c=9; c<63; c=c+9){
            if(giocatori[i].tiri == r || giocatori[i].tiri ==c){
                oca();
            } 
        }    
    }  
    if (giocatori[i].tiri == 6){//Controllo casella Il Ponte
        ponte();
    }    
    else if (giocatori[i].tiri == 42){// Controllo casella Labirinto
        labirinto();
    }    
    else if (giocatori[i].tiri > 63){// Controllo eccedenza
        superato();
    }    
    
}              
    
/*casa
funzione che, in caso si finisca nella casella casa attiva un contatore di turni da passare dentro la casella, e finiti questi
libera il giocatore prigioniero*/
void casa()
{
    giocatori[i].flagCasa = 1;
    printf("Casella %d\nCasella speciale La Casa\nCi rimani 3 turni!\n", giocatori[i].tiri);
     ++giocatori[i].turnoCasa;
     if (giocatori[i].turnoCasa == 4){
         printf("Al prossimo turno sei libero dalla casa!\n");
         giocatori[i].turnoCasa = 0;
         giocatori[i].flagCasa = 0;
     }
     else{
         printf("Hai ancora %d turni nella Casa!\n", 4-giocatori[i].turnoCasa);
     }    
}    

/*pozzo
funzione che controllo i giocatori finiti nella casella pozzo, nel caso ci finisca un giocatore lo tiene dentro la casella
fino a quando qualcuno non prende il suo posto*/
void pozzo()
{
    giocatori[i].flagCasa = 1;
    printf("Casella %d\nCasella speciale Il Pozzo!\nCi rimani fino a quando un altro giocatore non prende il tuo posto!\n", giocatori[i].tiri);
    for (r=0; r<numeroGiocatori && r!=i; r++){
        for (c=numeroGiocatori && c!=i; c>0; c--){
            if (giocatori[i].tiri == giocatori[r].tiri || giocatori[i].tiri == giocatori[c].tiri){
                printf("Sei libero dal pozzo!\n");
                giocatori[i].flagCasa = 0;
            }
            else{
                printf("Sei ancora nel pozzo, ci rimani fino a quando qualcuno non prende il tuo posto!\n");
            }
        }
    }    
}    

/*prigione
funzione che controllo i giocatori finiti nella casella prigione, nel caso ci finisca un giocatore lo tiene dentro la casella
fino a quando qualcuno non prende il suo posto*/
void prigione()
{
    giocatori[i].flagCasa = 1;
    printf("Casella %d\nCasella speciale Prigione!\n", giocatori[i].tiri);
    for (r=0; r<numeroGiocatori && r!=i; r++){
        for (c=numeroGiocatori && c!=i; c>0; c--){
            if (giocatori[i].tiri == giocatori[r].tiri || giocatori[i].tiri == giocatori[c].tiri){
                printf("Sei fuori dalla prigione!\n");
                giocatori[i].flagCasa = 0;
            }
            else{
                printf("Ci rimani fino a quando qualcuno non prende il tuo posto!\n");
            }    
        }    
    }     
}    
          
/*oca
funzione che gestisce le caselle oca facendo avanzare il giocatore finito su una di queste caselle del numero precedentemente fatto
con il lancio dei dadi*/
void oca()
{
    printf("Casella %d\nCasella speciale Oca!\n%s si muove nuovamente del tiro prima effettuato!\n",giocatori[i].tiri, giocatori[i].giocatore);
    giocatori[i].tiri = giocatori[i].tiri + dado;
    if (giocatori[i].tiri == 39 || giocatori[i].tiri == 19 || giocatori[i].tiri == 52){
        giocatori[i].flagCasa = 1;
    }    
    //printf("%s si trova nella casella numero %d\n",giocatori[i].giocatore, giocatori[i].tiri);
}              

/*ponte
funzione che gestisce la caselle ponte facendo avanzare il giocatore finito su quesae caselle del numero precedentemente fatto
con il lancio dei dadi*/
void ponte()
{
    printf("Casella %d\nCasella speciale Il Ponte!\n%s si muove nuovamente del tiro prima effettuato!\n",giocatori[i].tiri, giocatori[i].giocatore);
    giocatori[i].tiri = giocatori[i].tiri + dado;
    if (giocatori[i].tiri == 39 || giocatori[i].tiri == 19 || giocatori[i].tiri == 52){
        giocatori[i].flagCasa = 1;
    }
    //printf("%s si trova nella casella numero %d\n", giocatori[i].giocatore, giocatori[i].tiri); 
}    

/*labirinto
funzione che gestisce la casella labirinto, portando il giocatore che ci finisce sopra nuovamente nella casella 1*/
void labirinto()
{
    printf("Casella %d\nCasella speciale Labirinto!\n%s ritorna alla casella 39, Il Pozzo!\nRimanici fino a quando qualcuno non prende il tuo posto!\n", giocatori[i].tiri, giocatori[i].giocatore);
    giocatori[i].tiri = 39;
    giocatori[i].flagCasa = 1;
}    

/*superato
funzione che gestisce i lanci del dado che farebero superare la casella 63, facendo tornare indietro un giocatore che con un lancio
supera la casella 63*/
void superato()
{
    int eccedenza;
    eccedenza = giocatori[i].tiri-63;
    giocatori[i].tiri=63-eccedenza;
    printf("La casella 63 va raggiunta con un tiro esatto\n%s si trova ora nella casella %d\n", giocatori[i].giocatore, giocatori[i].tiri);
}    

/*vittoria
funzione che si attiva in caso di vittoria da parte di un giocatore, e ne dichiara appunto la vittoria, interrompendo così il ciclo
degli altri giocatori*/
void vittoria()
{
    printf("Complimenti %s hai vinto!!\n", giocatori[i].giocatore);
    flagVittoria = 1;
}    

/*nuovaPartita
funzione che permette, una volta finita una partita, di cominciarne una nuova senza dover uscire dal gioco,
o eventualmente, se i giocatori lo desiderano, uscire*/ 
void nuovaPartita()
{
    do{
        printf("Giocare una nuova partita? (S/N)\n");
        fflush(stdin);
        scanf("%c", &risposta);
        if (risposta == 'S' || risposta == 's'){
            printf("Si ricomincia\n");
            return;
        } 
        else if (risposta == 'N' || risposta == 'n'){
            exit(1);
        }
        else{
            printf("Il carattere inserito e' diverso sia da S che da N, si prega di riprovare\n");
        }
    }while (risposta != 'N' || risposta != 'n' || risposta != 'S' || risposta != 's');            
}    
'; giocatori[i].flagCasa = 0; giocatori[i].tiri = 0; giocatori[i].turnoCasa = 0; } } /*fase2() funzione entro la quale viene svolta la stampa del turno e del campo di gioco con la posizione dei giocatori*/ void fase2() { printf("Turno %d\n", turno); turno++; //Stampa campo int flagCiclo=0; int numero = 0; int campo[RIGHE][COLONNE]; //Creazione campo for (r=0; r<RIGHE; r++){ for (c=0; c<COLONNE; c++){ campo[r][c] = numero; ++numero; } } //Stampa Campo for (r=0; r<RIGHE; r++){ printf("\n"); for (c=0; c<COLONNE; c++){ for (i=0; i<numeroGiocatori; i++){ if (giocatori[i].tiri == campo[r][c]){ printf("%7s", giocatori[i].giocatore); flagCiclo=1; } else if(i==numeroGiocatori-1&&flagCiclo==0){ printf("%7d", campo[r][c]); } } flagCiclo=0; } } } /*domanda funzione che chiede ogni turno se il giocatore vuole continuare il gioco o uscire*/ void domanda() { do{ printf("\n"); printf("Tocca a %s\nCominciare il turno o uscire? (C/E)\n", giocatori[i].giocatore); fflush(stdin); scanf("%c", &risposta); if(risposta == 'C' || risposta == 'c'){ printf("%s inizia!\n", giocatori[i].giocatore); return; } else if(risposta == 'E' || risposta == 'e'){ exit(1); } else{ printf("Il carattere inserito e' diverso sia da C che da E, si prega di riprovare\n"); } }while(risposta != 'E' || risposta != 'e' || risposta != 'C' || risposta != 'c'); } /*lancioDado funzione che viene utilizzata per ricreare il lancio di un dado*/ void lancioDado() { dado = 0; srand(time(NULL)); dado = rand() % 6; dado++; printf("Il lancio del dado ha prodotto la faccia %d\n",dado); // Spostamento giocatore giocatori[i].tiri = giocatori[i].tiri + dado; } /*speciali Funzione che controlla se un giocatore sia finito o meno in una casella speciale e lo reindirizza alla funzione corrispondente alla casella*/ void speciali() { //Controllo casella Casa if (giocatori[i].tiri == 19){ casa(); } else if(giocatori[i].tiri == 39){//Controllo casella pozzo pozzo(); } else if (giocatori[i].tiri == 52){//Controllo casella prigione prigione(); } //Controllo caselle oca for(r=5; r<63; r=r+9){ for(c=9; c<63; c=c+9){ if(giocatori[i].tiri == r || giocatori[i].tiri ==c){ oca(); } } } if (giocatori[i].tiri == 6){//Controllo casella Il Ponte ponte(); } else if (giocatori[i].tiri == 42){// Controllo casella Labirinto labirinto(); } else if (giocatori[i].tiri > 63){// Controllo eccedenza superato(); } } /*casa funzione che, in caso si finisca nella casella casa attiva un contatore di turni da passare dentro la casella, e finiti questi libera il giocatore prigioniero*/ void casa() { giocatori[i].flagCasa = 1; printf("Casella %d\nCasella speciale La Casa\nCi rimani 3 turni!\n", giocatori[i].tiri); ++giocatori[i].turnoCasa; if (giocatori[i].turnoCasa == 4){ printf("Al prossimo turno sei libero dalla casa!\n"); giocatori[i].turnoCasa = 0; giocatori[i].flagCasa = 0; } else{ printf("Hai ancora %d turni nella Casa!\n", 4-giocatori[i].turnoCasa); } } /*pozzo funzione che controllo i giocatori finiti nella casella pozzo, nel caso ci finisca un giocatore lo tiene dentro la casella fino a quando qualcuno non prende il suo posto*/ void pozzo() { giocatori[i].flagCasa = 1; printf("Casella %d\nCasella speciale Il Pozzo!\nCi rimani fino a quando un altro giocatore non prende il tuo posto!\n", giocatori[i].tiri); for (r=0; r<numeroGiocatori && r!=i; r++){ for (c=numeroGiocatori && c!=i; c>0; c--){ if (giocatori[i].tiri == giocatori[r].tiri || giocatori[i].tiri == giocatori[c].tiri){ printf("Sei libero dal pozzo!\n"); giocatori[i].flagCasa = 0; } else{ printf("Sei ancora nel pozzo, ci rimani fino a quando qualcuno non prende il tuo posto!\n"); } } } } /*prigione funzione che controllo i giocatori finiti nella casella prigione, nel caso ci finisca un giocatore lo tiene dentro la casella fino a quando qualcuno non prende il suo posto*/ void prigione() { giocatori[i].flagCasa = 1; printf("Casella %d\nCasella speciale Prigione!\n", giocatori[i].tiri); for (r=0; r<numeroGiocatori && r!=i; r++){ for (c=numeroGiocatori && c!=i; c>0; c--){ if (giocatori[i].tiri == giocatori[r].tiri || giocatori[i].tiri == giocatori[c].tiri){ printf("Sei fuori dalla prigione!\n"); giocatori[i].flagCasa = 0; } else{ printf("Ci rimani fino a quando qualcuno non prende il tuo posto!\n"); } } } } /*oca funzione che gestisce le caselle oca facendo avanzare il giocatore finito su una di queste caselle del numero precedentemente fatto con il lancio dei dadi*/ void oca() { printf("Casella %d\nCasella speciale Oca!\n%s si muove nuovamente del tiro prima effettuato!\n",giocatori[i].tiri, giocatori[i].giocatore); giocatori[i].tiri = giocatori[i].tiri + dado; if (giocatori[i].tiri == 39 || giocatori[i].tiri == 19 || giocatori[i].tiri == 52){ giocatori[i].flagCasa = 1; } //printf("%s si trova nella casella numero %d\n",giocatori[i].giocatore, giocatori[i].tiri); } /*ponte funzione che gestisce la caselle ponte facendo avanzare il giocatore finito su quesae caselle del numero precedentemente fatto con il lancio dei dadi*/ void ponte() { printf("Casella %d\nCasella speciale Il Ponte!\n%s si muove nuovamente del tiro prima effettuato!\n",giocatori[i].tiri, giocatori[i].giocatore); giocatori[i].tiri = giocatori[i].tiri + dado; if (giocatori[i].tiri == 39 || giocatori[i].tiri == 19 || giocatori[i].tiri == 52){ giocatori[i].flagCasa = 1; } //printf("%s si trova nella casella numero %d\n", giocatori[i].giocatore, giocatori[i].tiri); } /*labirinto funzione che gestisce la casella labirinto, portando il giocatore che ci finisce sopra nuovamente nella casella 1*/ void labirinto() { printf("Casella %d\nCasella speciale Labirinto!\n%s ritorna alla casella 39, Il Pozzo!\nRimanici fino a quando qualcuno non prende il tuo posto!\n", giocatori[i].tiri, giocatori[i].giocatore); giocatori[i].tiri = 39; giocatori[i].flagCasa = 1; } /*superato funzione che gestisce i lanci del dado che farebero superare la casella 63, facendo tornare indietro un giocatore che con un lancio supera la casella 63*/ void superato() { int eccedenza; eccedenza = giocatori[i].tiri-63; giocatori[i].tiri=63-eccedenza; printf("La casella 63 va raggiunta con un tiro esatto\n%s si trova ora nella casella %d\n", giocatori[i].giocatore, giocatori[i].tiri); } /*vittoria funzione che si attiva in caso di vittoria da parte di un giocatore, e ne dichiara appunto la vittoria, interrompendo così il ciclo degli altri giocatori*/ void vittoria() { printf("Complimenti %s hai vinto!!\n", giocatori[i].giocatore); flagVittoria = 1; } /*nuovaPartita funzione che permette, una volta finita una partita, di cominciarne una nuova senza dover uscire dal gioco, o eventualmente, se i giocatori lo desiderano, uscire*/ void nuovaPartita() { do{ printf("Giocare una nuova partita? (S/N)\n"); fflush(stdin); scanf("%c", &risposta); if (risposta == 'S' || risposta == 's'){ printf("Si ricomincia\n"); return; } else if (risposta == 'N' || risposta == 'n'){ exit(1); } else{ printf("Il carattere inserito e' diverso sia da S che da N, si prega di riprovare\n"); } }while (risposta != 'N' || risposta != 'n' || risposta != 'S' || risposta != 's'); }
aaa