简体   繁体   中英

C++ 'Word Jumble'

I have a small problem. I have attempted to make the game 'Word Jumble' with a scoring system. But sometimes, when the computer guesses a word, then it'll say: The word is: blank here . There should be a jumbled word there. When I try any word, it just subtracts 1.#INF points.

Code:

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

using namespace std;
const int size=10;
string Words[size] = {
    "consecutive",
    "alternative",
    "consequently",
    "jumbled",
    "computer",
    "charger",
    "food",//I'm hungry
    "library",
    "strawberry",
    "carrier"
};
string Hints[size] = {
    "Following continuously.",
    "Something available as another opportunity.",
    "As a result.",
    "This word is rather jumbled, isn't it ;)",
    "The enitiy you are reading this off of",
    "My phone battery is running low",
    "I'm hungry, I need some _",
    "Where can I go get a book?",
    "It's red, and not a berry."
    "Either carries stuff, or is what your data company is called."
};
void main()
{
    string word,hint;
    double points=0;
    bool correct=false,playAgain=true;
    cout << "Welcome to Word Jumble!\n";
    cout << "The objective of this game is to guess the jumbled word, correctly.\n";
    cout << "Say 'quit' to quit, or 'hint' for a hint.\n";
    while (playAgain==true)
    {
        correct = false;
        int guesses = 0;
        srand(static_cast<unsigned int>(time(0)));
        int num = rand() % size + 1;
        word = Words[num];
        hint = Hints[num];
        string jumble = word;
        int length = jumble.size();
        for (int i = 0; i < length*2; ++i)
        {
            int index1 = (rand() % length);
            int index2 = (rand() % length);
            char temp = jumble[index1];
            jumble[index1] = jumble[index2];
            jumble[index2] = temp;
        }
        cout << "The word is: " << jumble << endl;
        double tempPoints=0;
        while (correct==false)
        {
            string theGuess;
            cout << "Guess the word: ";
            cin >> theGuess;
            guesses++;
            while (!cin)
            {
                cin.sync();
                cin.clear();
                cout << "Ivalid entry, try again: ";
                cin >> theGuess;
            }
            if (theGuess == word)
            {
                cout << "Correct! You guessed the word in only " << guesses << " tries!\n";
                tempPoints += jumble.size()*1.5;
                tempPoints -= (guesses - 1) / 4.0;
                points += tempPoints;
                cout << "You have been awarded " << tempPoints << " points this round for a total of " << points << "!\n";
                correct = true;
                cout << "Would you like to play again? (y or n): ";
                char tempYN;
                cin >> tempYN;
                while (!cin || tempYN != 'y' && tempYN != 'n')
                {
                    cin.sync();
                    cin.clear();
                    cout << "Invalid entry.\nWould you like to play again? (y or n): ";
                    cin >> tempYN;
                }
                if (tempYN == 'y')
                {
                    playAgain = true;
                }
                else
                {
                    playAgain = false;
                }
            }
            else if (theGuess == "hint")
            {
                tempPoints -= (1.0 / (jumble.size())) * 40;
                cout << "Hint: " << hint << endl;
                correct = false;
                playAgain = true;
            }
            else if (theGuess == "quit")
            {
                correct = true;
                playAgain = false;
            }
            else
            {
                double sub = (1.0 / (jumble.size())) * 20;
                cout << "Incorrect word, deducting "<<sub<<" points\n";
                tempPoints -= sub;
                playAgain = true;
                correct = false;
            }
        };
    };
    cout << "Goodbye\n";
}

In the line:

int num = rand() % size + 1;

You are saying to select a random number between 0 and 9 then add 1.

If the random number is 9 the + 1 will make it 10. This means that you are trying to access a value in the array Words and Hints at index 10. Since arrays are 0 indexed and it's size is 10 that means you only have elements at 0 - 9.

You also will never get the first string in the arrays.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM