PDA

Visualizza la versione completa : C : problema con ciclo e generatore casuale


bennystefa
31-05-2017, 11:37
Salve a tutti, in un esercizio di programmazione si chideva di implementare un programma composto dalle funzioni:


int roll_dice(void) che genera 2 numeri casuali compresi tra 1 e 6 e se restituisce la somma
bool play_game(void) che restituisce true se il giocatore vince, false se perde (regole: se al primo lancio ottiene come somma dei dadi 7 o 11 vince, se ottine 2,3 o 12 perde, altrimenti vince se nei successivi lanci riesce ad ottenere il risultato del prima lancio e perde se ottiene 7)
main che, oltre a chiamare play_game(), tiene traccia delle vittorie e delle sconfitte


I miei problemi sono 2:

Nel main, il ciclo mi si interrompe sempre alla seconda interazione e non riesco a capire il perchč
Non so se sia normale, ma spesso roll_dice genera pił volte consecutivamente gli stessi numeri casuali


Grazie a chi mi aiuterą :)


#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
#include <time.h>
#include <ctype.h>

#define FACCE_DADO 6

int roll_dice(void);
int play_game(void);

int main(void)
{
int wins = 0, defeats = 0;
char c;
do{
if(play_game())
{
printf("YOU WIN\n");
wins++;
}
else
{
printf("YOU LOOSE\n");
defeats++;
}
printf("Play again? ");
scanf("%c",&c);
printf("\n");
c = toupper(c);
}while(c == 'Y');

printf("Wins: %d \tLossess: %d",wins,defeats);

return 0;
}

int roll_dice(void)
{
int dice1,dice2,sum = 0;
srand(time(NULL));
dice1 = rand() % FACCE_DADO + 1;
dice2 = rand() % FACCE_DADO + 1;
return (dice1 + dice2);
}

int play_game(void)
{
bool ris,done = true;
int i = roll_dice();
printf("You rolled %d\n",i);
if(i == 7 || i == 11)
ris = true;
else if(i == 2 || i == 3 || i == 12)
ris = false;
else
{
printf("Your point is %d\n",i);
int j = roll_dice();
while(done)
{
printf("You rolled %d\n", j);
if(j == i)
{
ris = true;
done = false;
}

else if(j == 7)
{
ris = false;
done = false;
}
else
done = true;
}
}

return ris;
}

Loading