Visualizzazione dei risultati da 1 a 6 su 6

Discussione: [C] Lancio dei dadi

  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2011
    Messaggi
    50

    [c] lancio "dado truccato"

    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.
    codice:
    #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
    codice:
    code

  2. #2
    Allora facciamo un po' d'ordine:

    1) nel for confronti i con sfide:

    codice:
    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:

    codice:
    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?
    Salute a voi, da Laikius!

    --> Faber est suae quisque fortunae <--

  3. #3
    Utente di HTML.it
    Registrato dal
    Feb 2011
    Messaggi
    50
    codice:
    #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
    codice:
    code

  4. #4
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Originariamente inviato da asteroid
    codice:
     
    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
    codice:
     
    system("pause");
    system("CLS");


    Originariamente inviato da asteroid
    codice:
     
     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?
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  5. #5
    Utente di HTML.it
    Registrato dal
    Feb 2011
    Messaggi
    50
    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!



    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!!
    codice:
    code

  6. #6
    Originariamente inviato da asteroid
    perchè mi è simpatico...!!
    XD

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.