vendredi 29 mai 2015

How to get a completely random number in C++

When I compile the below source, I'm getting a psuedo-random number. This source code is not mine and I don't know anything about the randomize() or the random() functions. I know about srand() and rand(). Can someone explain the difference b/w these four functions and help me completely randomise this instance of The Hangman Game.

#include <iostream.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>

const int MAXLENGTH=80;
const int MAX_TRIES=5;
const int MAXROW=7;

int letterFill (char, char[], char[]);
void initUnknown (char[], char[]);

int main ()
{
    char unknown [MAXLENGTH];
    char letter;
    int num_of_wrong_guesses=0;
    char word[MAXLENGTH];
    char words[][MAXLENGTH] =
    {
        "india",
        "pakistan",
        "nepal",
        "malaysia",
        "philippines",
        "australia",
        "iran",
        "ethiopia",
        "oman",
        "indonesia"
    };

    //choose and copy a word from array of words randomly
    randomize();
    int n=random(10);
    strcpy(word,words[n]);

    // Initialize the secret word with the * character.
    initUnknown(word, unknown);

    // welcome the user
    cout << "\n\nWELCOME TO...\n\n"
   "\n{}    {}     {}{}      {}    {}    {}}}}}     {}      {}    {}{}     {}    {}"
"\n{}    {}    {}  {}     {}}}  {}   {}          {}}}  {{{}   {}  {}    {}}}  {}"
"\n{}{{}}{}   {}{{}}{}    {} {} {}   {}          {} {{}} {}  {}{{}}{}   {} {} {}"
"\n{}    {}   {}    {}    {}  {{{}   {}  {{{{    {}  {}  {}  {}    {}   {}  {{{}"
"\n{}    {}   {}    {}    {}    {}    {}}}}}     {}      {}  {}    {}   {}    {}"
   "\nGuess a country Name";
    cout << "\n\nEach letter is represented by a star.";
    cout << "\n\nYou have to type only one letter in one try";
    cout << "\n\nYou have " << MAX_TRIES << " tries to try and guess the word.";
    cout << "\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~";

    // Loop until the guesses are used up
    while (num_of_wrong_guesses < MAX_TRIES)
    {
        cout << "\n\n" << unknown;
        cout << "\n\nGuess a letter: ";
        cin >> letter;
        // Fill secret word with letter if the guess is correct,
        // otherwise increment the number of wrong guesses.
        if (letterFill(letter, word, unknown)==0)
        {
            cout << endl << "Whoops! That letter isn't in there!" << endl;
            num_of_wrong_guesses++;
        }
        else
        {
            cout << endl << "You found a letter! Isn't that exciting!" << endl;
        }
        // Tell user how many guesses has left.
        cout << "You have " << MAX_TRIES - num_of_wrong_guesses;
        cout << " guesses left." << endl;
        // Check if they guessed the word.
        if (strcmp(word, unknown) == 0)
        {
            cout << word << endl;
            cout << "Yeah! You got it!\n\n>> YOU WIN <<\n$$ HERE'S THE TREASURE $$"<<endl<<endl;
         cout<<"\n*******************************************************************************"
"\n          |                   |                  |                     |"
"\n _________|________________.=""_;=.______________|_____________________|_______"
"\n|                   |  ,-'_,=''     `'=.|                  |"
"\n|___________________|__'=._'''-._        ''=.______________|___________________"
"\n          |                ''=._o''=._      _''=._                     |"
"\n _________|_____________________:=._o '=._.'_.-='''=.__________________|_______"
"\n|                   |    __.--' , ; ''=._o.' ,-'''-._ '.   |"
"\n|___________________|_._'  ,. .' ' '' ,  ''-._'-._   '. '__|___________________"
"\n          |           |o''=._' , '' '; .'. ,  '-._'-._; ;              |"
"\n _________|___________| ;'-.o''=._; .' ' ''.' ' . '-._ /_______________|_______"
"\n|                   | |o;    ''-.o''=._''  '' ' ,__.--o;   |"
"\n|___________________|_| ;     (#) '-.o ''=.'_.--'_o.-; ;___|___________________"
"\n____/______/______/___|o;._    '      ''.o|o_.--'    ;o;____/______/______/____"
"\n/______/______/______/_'=._o--._        ; | ;        ; ;/______/______/______/_"
"\n____/______/______/______/__'=._o--._   ;o|o;     _._;o;____/______/______/____"
"\n/______/______/______/______/____'=._o._; | ;_.--'o.--'_/______/______/______/_"
"\n____/______/______/______/______/_____'=.o|o_.--''___/______/______/______/____"
"\n/______/______/______/______/______/______/______/______/______/______/_______/"
"\n*******************************************************************************";
            break;
        }

    }
    if(num_of_wrong_guesses == MAX_TRIES)
    {
        cout << "\nSorry, you lose...you've been hanged." << endl<<endl;
      cout<<
     "\n       (/)"
"\n       (/)"
"\n       (/)"
"\n       (/)"
"\n       (/)"
"\n       (/)"
"\n       (/))"
"\n      (/)(/)"
"\n     (/)''(/)"
"\n    (/)    (/)"
"\n    (/)    (/)"
"\n    (/)    (/)"
"\n    (/)    (/)"
"\n     (/)   (/)"
"\n      (/) (/)"
"\n        (/)";
        cout << "\nThe word was : " << word << endl;
    }
    getch();
    return 0;
}

/* Take a one character guess and the secret word, and fill in the
 unfinished guessword. Returns number of characters matched.
 Also, returns zero if the character is already guessed. */

int letterFill (char guess, char secretword[], char guessword[])
{
    int i;
    int matches=0;
    for (i = 0; secretword[i]!='\0'; i++)
    {

        // Did we already match this letter in a previous guess?
        if (guess == guessword[i])
            return 0;

        // Is the guess in the secret word?
        if (guess == secretword[i])
        {
            guessword[i] = guess;
            matches++;
        }
    }
    return matches;
}


// Initialize the unknown word                 

void initUnknown (char word[], char unknown[])
{
    int i;
    int length = strlen(word);
    for (i = 0; i < length; i++)
        unknown[i]='*';
    unknown[i]='\0';
}




Aucun commentaire:

Enregistrer un commentaire