Gioco della tombola

di il
4 risposte

Gioco della tombola

Salve ragazzi, avrei bisogno di un aiuto. Devo scrivere un programma che simuli il gioco della tombola. Ci sono 5 giocatori con un una sola cartella a testa; le cartelle sono generate casualmente seguendo le regole della tombola (massimo un numero per decina, tutti numeri diversi...). Il programma deve poi simulare l'estrazione di un numero e visualizzare quale dei cinque giocatori fa ambo, terno, quaterna, quintina e tombola. Sono riuscito a scrivere le function per generare correttamente le cartelle e i numeri da estrarre ma adesso non ho idea di come svolgere il resto della consegna. Vorrei qualche dritta su come continuare e magari la conferma che il codice che ho scritto fino ad ora sia corretto (ho testato diverse volte il codice e non ne ha sbagliata una, ma non si sa mai). Ecco cosa ho scritto per il momento:

void cartelle (int giocatore[3][5]){
    srand((unsigned int)time(0));
    int i, j, numero;

    for(i = 0; i < 3; i++){
        int a = 0, b = 19;
        for(j = 0; j < 5; j++){
            numero = rand()%(b - a) + a;

            if(numero < 1 || numero > 90) j--;
            else{
                giocatore[i][j] = numero;
                a = a + 20;
                b = b + 20;
            }
        }
    }
}

/* Le function swap e randomize sono utilizzate per disordinare l'array che contiene
 * tutti i possibili numeri della tombola*/
void swap(int *a, int *b) {
    int temp = *a;
    *a = *b;
    *b = temp;
}

void randomize(int arr[], int n) {
    srand(time(NULL));
    int i;
    for(i = n-1; i > 0; i--) {
        int j = rand() % (i+1);
        swap(&arr[i], &arr[j]);
    }
}

void main(){
    int A[3][5], B[3][5], C[3][5], D[3][5], E[3][5];
    int i, numero = 1, array[90], ambo = 0, terno = 0, quaterna = 0, quintina = 0, tombola = 0;

    cartelle(A);
    cartelle(B);
    cartelle(C);
    cartelle(D);
    cartelle(E);

    for(i = 0; i < 90; i++){
        array[i] = numero;
        numero++;
    }
    randomize(array, 90);
}
Grazie in anticipo

4 Risposte

  • Re: Gioco della tombola

    Si chiama "cinquina" non quintina ...

    A parte questo ... non ho capito quale parte non sai fare ...
  • Re: Gioco della tombola

    oregon ha scritto:


    Si chiama "cinquina" non quintina ...

    A parte questo ... non ho capito quale parte non sai fare ...
    Nella consegna è scritta in questo modo, ma effettivamente mi sembrava strano . Comunque, una volta estratto un numero non so come verificare che sia presente nelle cartelle. Non so come visualizzare chi fa ambo, terno... Volevo utilizzare una function che riconoscesse le corrispondenze e tutto il resto per ogni cartella, ci ho anche provato, ma a conti fatti sarei arrivato a usare circa 50 variabili. Questo è una bozza, che ovviamente non funziona:
    
    void check(int cartella[3][5], int numero, int due, int tre, int quattro, int cinque, int vittoria, int cart, int riga1, int riga2, int riga3){
        for(int i = 0; i < 3; i++){
            for(int j = 0; j< 5; j++){
                if(numero == cartella[i][j]){
                    cart++;
                    if(cart == 15) vittoria = 1;
                    if(i == 0){
                        riga1++;
                        if(riga1 == 2 && due == 0) due = 1;
                        if(riga1 == 3 && tre == 0) tre = 1;
                        if(riga1 == 4 && quattro == 0) quattro = 1;
                        if(riga1 == 5 && cinque == 0) cinque = 1;
                    }
                    if(i == 0){
                        riga2++;
                        if(riga2 == 2 && due == 0) due = 1;
                        if(riga2 == 3 && tre == 0) tre = 1;
                        if(riga2 == 4 && quattro == 0) quattro = 1;
                        if(riga2 == 5 && cinque == 0) cinque = 1;
                    }
                    if(i == 0){
                        riga3++;
                        if(riga3 == 2 && due == 0) due = 1;
                        if(riga3 == 3 && tre == 0) tre = 1;
                        if(riga3 == 4 && quattro == 0) quattro = 1;
                        if(riga3 == 5 && cinque == 0) cinque = 1;
                    }
                }
            }
        }
    }
    
    L'idea sarebbe, per esempio, quella di porre "due" uguale a 1 quando un giocatore fa ambo; il main riconosce qual è il giocatore e stampa il suo nome sullo schermo.
  • Re: Gioco della tombola

    BrNiCK98 ha scritto:


    oregon ha scritto:


    Si chiama "cinquina" non quintina ...

    A parte questo ... non ho capito quale parte non sai fare ...
    Nella consegna è scritta in questo modo
    Sì ... è un modo "non comune" (per non dire antiquato) del termine ... era solo una curiosità ...
    una volta estratto un numero non so come verificare che sia presente nelle cartelle.
    Devi fare una semplice ricerca nelle varie cartelle e segnare da qualche parte il risultato ottenuto.

    Per il codice, intanto usa i nomi delle variabili con un senso. Scrivi

    int ambo=0;

    e così via per le varie combinazioni.

    Devi avere un metodo per indicare che un numero della cartella è già uscito. Che metodo usi?
  • Re: Gioco della tombola

    oregon ha scritto:



    Devi avere un metodo per indicare che un numero della cartella è già uscito. Che metodo usi?
    Ogni riga è formata da 5 numeri, quindi quando trovo una corrispondenza incremento di uno un contatore. Se il contatore raggiunge 2, 3, 4, 5 prima degli altri allora il giocatore fa ambo, terno, quanterna e cinquina. Uso poi un altro contatore, relativo a tutta la cartella e non solo alla riga, che quando arriva a 15 vuol dire che il giocatore ha fatto tombola e chiude il programma. Purtroppo però, se uso una function, non so come avvertire il main quando qualcuno fa un punteggio e quale dei giocatori lo ha fatto.
Devi accedere o registrarti per scrivere nel forum
4 risposte