Craps - C ANSI

Pubblicità

Prey92

Utente Attivo
Messaggi
58
Reazioni
1
Punteggio
26
Ciao a tutti mi sto scervellando da alcuni giorni, ho iniziato da poco C ANSI e dovrei fare un esercizio riguardante il gioco "CRAPS" (si lanciano 2 dadi, se la somma è 7 o 11 al primo lancio il giocatore ha vinto, se è 2-3 o 12 il giocatore ha perso. Se la somma è 4, 5, 6, 8, 9, o 10 questo sara il suo punteggio e deve continuare a tirare finche non ri-esce quel numero).
Dopo la fine della partita bisogna chiedere se fare un'altra partita oppure no.
Alla fine il programma deve anche fornire il numero di partite vinte e perse.
Sono arrivato qua ma non so più come fare..
#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int InputDado();


main()
{
int dado1, dado2, somma;

dado1=InputDado();
dado2=InputDado();
printf("Il giocatore ha tirato %d e %d \n",dado1,dado2);
somma=dado1+dado2;
printf("Il punteggio e': %d\n",somma);


system("PAUSE");
return 0;
}

int InputDado()
{
int a;
a = 1 + rand() % 6;
return a;
}
 
Ciao,

il concetto del singolo lancio l'hai implementato... ora devi controllare i risultati e ripeterlo più volte.
Per confrontare i dati si usa il costrutto if.
Per ripetere delle iterazioni devi usare i cicli (for, while, do-while)...

ti consiglio di studiarli per bene e provare ad andare avanti a scrivere il programma.

Consiglio inoltre di usare srand per poter specificare il seed... almeno così ha una parvenza di casualità.

Ti lascio comunque una possibile soluzione:

Codice:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <time.h>


int InputDado();
int ChiediSeRigioca();


int main()
{
    srand((unsigned)time(NULL));

    int numVinte = 0;
    int numPerse = 0;
    int dado1, dado2, somma;
    int rigioca = 1; // non uso bool perchè fa parte del C++ e nn del C

    while(rigioca)
    {
        // PRIMO LANCIO:
        dado1=InputDado();
        dado2=InputDado();
        somma = dado1 + dado2;
        printf("Il giocatore ha tirato %d e %d , il risultato e': %d \n",dado1, dado2, somma);

        if(somma == 7 || somma == 11)
        {
            printf("Il giocatore ha vinto la partita\n");
            numVinte++;
        }
        else if(somma == 2 || somma == 3 || somma == 12)
        {
            printf("Il giocatore ha perso la partita\n");
            numPerse++;
        }
        else
        {
            // LANCI SUCCESSIVI
            int punteggio = somma;

            do
            {
                dado1=InputDado();
                dado2=InputDado();
                somma = dado1 + dado2;
                printf("Il giocatore ha tirato %d e %d , il risultato e': %d \n", dado1, dado2, somma);
            }
            while(somma != punteggio && somma != 7);

            if(somma == punteggio)
            {
                printf("Il giocatore ha vinto la partita\n");
                numVinte++;
            }
            else // somma sarà per forza 7
            {
                printf("Il giocatore ha perso la partita\n");
                numPerse++;
            }
        }

        printf("\nTotale partite vinte: %d\n", numVinte);
        printf("Totale partite perse: %d\n", numPerse);
        rigioca = ChiediSeRigioca();
        printf("\n");
    }

    system("PAUSE");
    return 0;
}


int ChiediSeRigioca()
{
    printf("\nIl giocatore vuole ritentare la sorte? (s/n)\n");

    while(1)
    {
        char c = getchar();

        if(c == 'n' || c == 'N')
            return 0;
        else if(c == 's' || c == 'S')
            return 1;
    }
}


int InputDado()
{
    int a;
    a = 1 + rand() % 6;
    return a;
}
Presumo che il programma sia a scopo didattico quindi l'ho scritto in maniera semplice non badando ad ottimizzazioni, riusabilità ecc...
... e ti ho messo anche un do-while che credo di non aver mai usato in vita mia :asd:


Spero di esserti stato di aiuto.
Ciao!
 
Pubblicità
Pubblicità
Indietro
Top