2015-07-12 1 views
0

J'ai juste commencé à apprendre des fonctions et à les maîtriser grâce à ce fil que j'ai posté Passing variable through switch statement with functions.Jeu de dés aléatoires à l'aide des fonctions

Créer un jeu de dés en faisant cela, j'ai des problèmes avec, cependant. Il semble que cela devrait être plus facile que la question précédente que j'ai posée, mais ce n'est pas le cas. J'ai du mal à passer les trois dés au hasard à travers les fonctions. Aussi, comme prévu, ma déclaration if à la fin ne fonctionne pas, mais je ne sais pas pourquoi. Voici mon courant en tant que stands. Désolé à l'avance pour mon nom de menu désagréable

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

    #define MAXROLLS 5 
    #define LOWERBOUND 1 
    #define UPPERBOUND 6 
    #define PAUSE system("pause") 

    int diceOne, diceTwo, diceThree; 
    int currentDiceSum=0, totalDiceSum=0; 
    int quit= 0; 
    int count = 0; 





    char menuChoice() 
    { 

    char choice; 

    printf("\n\n==============================================================================\n"); 
    printf("\n\n== W E L C O M E  T O  M Y  D I C E  R O L L I N G  G A M E==\n"); 
    printf("\n\n==============================================================================\n"); 
    printf("\n Roll the dice, but you only get 5 rolls! You can't play forever, you know. \n"); 

    printf("Main Menu\n"); 
    printf("A.Roll the Dice\n"); 
    printf("B.Display the Result of Last Roll\n"); 
    printf("C.Quit\n"); 


    printf("Enter your choice: "); 
    scanf(" %c", &choice); 
    choice = toupper(choice); 

} 


int rollTheDice() 
{ 
    int diceOne = LOWERBOUND + rand() % (UPPERBOUND - LOWERBOUND + 1); 
    int diceTwo = LOWERBOUND + rand() % (UPPERBOUND - LOWERBOUND + 1); 
    int diceThree = LOWERBOUND + rand() % (UPPERBOUND - LOWERBOUND + 1); 
    srand((unsigned)time(NULL)); 



    return diceOne; 
    return diceTwo; 
    return diceThree; 



} 


int getDiceRoll() 
{ 

    currentDiceSum = diceOne + diceTwo + diceThree; 
    totalDiceSum+= currentDiceSum; 
} 


int quitTotal() 
{ 

    totalDiceSum+= currentDiceSum; 


} 

int main() 
{ 


    while(quit!=1) //begin menu loop 
    { 
     char menu; 



     menu = menuChoice(); 
     switch(menu) 
     { 
      case 'A': 
      { 
       rollTheDice(); 
       printf("Dice are rolled!\n"); 
       count++; 
       printf("You have %i rolls left.\n", MAXROLLS - count); 
       break; 
      } 


      case 'B': 

       getDiceRoll(); 
       printf("Dice 1: %d\n", diceOne); 

       printf("Dice 2: %d\n", diceTwo); 

       printf("Dice 2: %d\n", diceThree); 

       printf("Dice Total: %d\n", currentDiceSum); 

      break; 
      case 'C': 
       quitTotal(); 
       printf("Number of rolls: %d\n", count); 

       printf("Total of all dice for all rolls: %d\n", totalDiceSum); 

       printf("Goodbye, hope to see you again!!!\n"); 
       PAUSE; 
       quit = 1; 
       break; 
      default: 
       printf("Please enter A,B,C\n"); 
       break; 
     } //end switch 
    } // end loop 


if (count == MAXROLLS) 

{ 

    printf("Sorry, your rolls are up!!!\n"); 


    printf("Your final roll was:\n"); 

    printf("Dice 1: %d\n", diceOne); 

    printf("Dice 2: %d\n", diceTwo); 

    printf("Dice 3: %d\n", diceThree); 

    currentDiceSum = diceOne + diceTwo + diceThree; 

    printf("Your final dice sum was\n"); 
    printf("Dice Total: %d\n", currentDiceSum); 

    totalDiceSum+= currentDiceSum; 



    printf("Number of rolls: %d\n", count); 
    printf("Total of all dice for all rolls: %d\n", totalDiceSum); 
    printf("Goodbye, hope to see you again!!!\n"); 



} 

} //end function 

A partir de maintenant, je suis perdu. Je crois que je ne peux retourner qu'un résultat par fonction. Alors peut-être que je dois créer trois fonctions distinctes pour chaque dé?

+2

Vous n'avez pas besoin de les "renvoyer", ne les déclarez pas dans cette fonction - ils sont déjà globaux. (De plus, cherchez de la documentation pour 'srand', car ce n'est pas très utile.) – usr2564301

+0

Avez-vous déjà découvert les tableaux? Si oui, considérez les mérites de 'int dice [3];' comme votre variable. –

Répondre

0

Changer votre fonction comme suit:

typedef struct{ 
    int diceOne; 
    int diceTwo; 
    int diceThree; 
}DiceRolls; 

DiceRolls rollTheDice() 
{ 
    DiceRolls dice; 

    dice.diceOne = LOWERBOUND + rand() % (UPPERBOUND - LOWERBOUND + 1); 
    dice.diceTwo = LOWERBOUND + rand() % (UPPERBOUND - LOWERBOUND + 1); 
    dice.diceThree = LOWERBOUND + rand() % (UPPERBOUND - LOWERBOUND + 1); 
    return dice; 
} 

Par commentaires ci-dessous, il est souhaitable que l'appel à srand() se fait qu'une seule fois au cours d'initialisation.

+0

Voir ['srand()' - pourquoi l'appeler une seule fois?] (Http://stackoverflow.com/questions/7343833/srand-why-call-it-only-once/). –

+0

Mis à jour pour ne pas appeler srand() –

0

En C, les fonctions ne peuvent renvoyer qu'une seule valeur. Parce que le retour de diceOne vient en premier, diceOne est renvoyé par rollTheDice(). Si vous voulez juste que cela fonctionne et que vous ne voulez pas vous soucier de structures ou de quoi que ce soit, je supprimerais les int avant vos déclarations de variables pour assigner des valeurs aux variables globales au lieu de créer de nouvelles variables locales, ce qui donne rollTheDice() comme ceci:

int rollTheDice() 
{ 
    diceOne = LOWERBOUND + rand() % (UPPERBOUND - LOWERBOUND + 1); 
    diceTwo = LOWERBOUND + rand() % (UPPERBOUND - LOWERBOUND + 1); 
    diceThree = LOWERBOUND + rand() % (UPPERBOUND - LOWERBOUND + 1); 
    srand((unsigned)time(NULL)); 
}