PDA

Visualizza la versione completa : [C] Lancio dei dadi


asteroid
25-02-2011, 18:15
Due giocatori si s fidano lanciando un "dado truccato". Il dado ha dei valori interi nell'in-
tervallo [5; 15]. A ogni turno vince il giocatore che ottiene un punteggio maggiore. In caso
di parita' il punto viene assegnato a entrambi. Simulare 10 sfi de e visualizzare il giocatore
che vince piu volte.


#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{ int i,faccia_dado,sfide;
srand(time(NULL));
int punteggio_giocatore1;
int punteggio_giocatore2;
int primo_giocatore=1;
int secondo_giocatore=2;
int turno;
int lancio=0;
for(i=0;i<sfide;i++)
{/*genero 10 sfide quindi 10 lanci di dadi
distribuiti nell'intervallo [5,15]*/
turno=1+rand()%2;

if(turno==primo_giocatore)
{
printf("il giocator uno lancia il dado\n");
faccia_dado=5+rand()%15;
lancio++;
printf("la faccia del dado e':%d",faccia_dado);
punteggio_giocatore1++;
}
else if(turno==secondo_giocatore)
{
printf("il giocator due lancia il dado\n");
faccia_dado=5+rand()%15;
lancio++;
printf("la faccia del dado e':%d",faccia_dado);
punteggio_giocatore2++;
}
}
system("PAUSE");
return 0;
}

Il codice penso che sia una confusione, non s come confrontare la faccia del dado del primo giocatore con il secondo :bh:

Laikius91
26-02-2011, 11:36
Allora facciamo un po' d'ordine:

1) nel for confronti i con sfide:



for(i=0;i<sfide;i++)


per sfide non inizializzato! Quindi ricordati di farlo (penso che tu intenda inizializzarlo a 10..)..

2) all'interno di ciclo, scegli con la rand() quale giocatore inizia il turno (e fin qui ok), per poi devi far tirare ad entrambi il dado, perch ad ogni turno entrambi tirano e poi confronti! Quindi devi fare una cosa del tipo:



if(turno==primo_giocatore)
{
printf("il giocator uno lancia il dado\n");
punteggio_giocatore1 = 5+rand()%11;

printf("\nIl giocatore due lancia il dado\n");
punteggio_giocatore2 = 5+rand()%11;
}

else if (turno == secondo_giocatore)
{

/* come prima ma invertiti! */

}

if (punteggio_giocatore1 > punteggio_giocatore2)
punteggio_giocatore1++;

else if (punteggio_giocatore2 > punteggio_giocatore1)
punteggio_giocatore2++;

else
printf ("\nIn questo turno abbiamo un pareggio!");


Come noterai il tiro del dado con la rand() era sbagliato: rand()%15 genera valori da 0 a 14, se vai a sommarli a 5 ottieni valori compresi nell'intervallo [5; 19], non [5; 15] come volevi tu!

Che dici? :)

asteroid
26-02-2011, 15:37
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{ int i,sfide=10;
srand(time(NULL));
int primo_giocatore=1;
int secondo_giocatore=2;
int punteggio_giocatore1;
int punteggio_giocatore2;
int turno;
int vittoria_giocatore1=0;
int vittoria_giocatore2=0;
for(i=0;i<sfide;i++)
{/*genero 10 sfide quindi 10 lanci di dadi
distribuiti nell'intervallo [5,15]*/
turno=1+rand()%2;
if(turno==primo_giocatore)
{
printf("il giocator uno lancia il dado\n");
punteggio_giocatore1=5+rand()%11;
printf("la faccia del dado e':%d\n",punteggio_giocatore1);

printf("\nil giocator due lancia il dado\n");
punteggio_giocatore2=5+rand()%11;
printf("la faccia del dado e':%d\n",punteggio_giocatore2);

}
else if(turno==secondo_giocatore)
{
printf("il giocator due lancia il dado\n");
punteggio_giocatore2=5+rand()%11;
printf("la faccia del dado e':%d\n",punteggio_giocatore2);

printf("\nil giocator uno lancia il dado\n");
punteggio_giocatore1=5+rand()%11;
printf("la faccia del dado e':%d\n",punteggio_giocatore1);
}
if(punteggio_giocatore1>punteggio_giocatore2){
printf("il giocatore uno ha il valore del dado + alto:%d\n",punteggio_giocatore1);
vittoria_giocatore1++;
}
else if(punteggio_giocatore2>punteggio_giocatore1){
printf("il giocatore due ha il valore del dado + alto:%d\n",punteggio_giocatore2);
vittoria_giocatore2++;
}
if(punteggio_giocatore1==punteggio_giocatore2){
printf("i giocatori hanno pareggiato\n");
vittoria_giocatore1++;
vittoria_giocatore2++;
}
system("pause");
system("CLS");
if(vittoria_giocatore1>=vittoria_giocatore2)
printf("il giocatore uno ha vinto\n");
else
printf("il giocatore due ha vinto\n");
}
system("PAUSE");
return 0;
}

ecco qui

Alex'87
26-02-2011, 17:27
Originariamente inviato da asteroid


if(punteggio_giocatore1>punteggio_giocatore2){
printf("il giocatore uno ha il valore del dado + alto:%d\n",punteggio_giocatore1);
vittoria_giocatore1++;
}
else if(punteggio_giocatore2>punteggio_giocatore1){
printf("il giocatore due ha il valore del dado + alto:%d\n",punteggio_giocatore2);
vittoria_giocatore2++;
}
if(punteggio_giocatore1==punteggio_giocatore2){
printf("i giocatori hanno pareggiato\n");
vittoria_giocatore1++;
vittoria_giocatore2++;
}
Tralasciando la pessima indentazione (il codice illeggibile), quest'ultimo if inutile e dovrebbe essere sostituito da un else: se il primo punteggio non maggiore e non minore del secondo ne consegue che sono uguali! ;)


Originariamente inviato da asteroid


system("pause");
system("CLS"); :facepalm:


Originariamente inviato da asteroid


if(vittoria_giocatore1>=vittoria_giocatore2)
printf("il giocatore uno ha vinto\n");
else
printf("il giocatore due ha vinto\n");
} n 0;
Perch fai vincere il giocatore 1 anche quando c' stato un pareggio?

asteroid
27-02-2011, 14:39
Originariamente inviato da Alex'87
Tralasciando la pessima indentazione (il codice illeggibile), quest'ultimo if inutile e dovrebbe essere sostituito da un else: se il primo punteggio non maggiore e non minore del secondo ne consegue che sono uguali! ;)

:facepalm:

Perch fai vincere il giocatore 1 anche quando c' stato un pareggio?
perch mi simpatico...!! ;)

comunque si ho sistemato un p il codice...era un p rozzo!! :mem:

VincenzoTheBest
27-02-2011, 14:54
Originariamente inviato da asteroid
perch mi simpatico...!! ;)

XD

Loading