0

好的,所以我在这里遇到了一个大问题,在花了两天时间之后,我不知道为什么它没有像我认为的那样工作。

第一个问题:我有一个函数可以通过输入 ay 或 n 来查看玩家是否希望再次玩游戏。如果他们按 n,它应该终止,但如果他们按 Y 或 y,它只会再次询问他们是否要再次播放,直到按下除 y 之外的任何其他字符。

我的第二个问题,也是最烦人的,是我用来确定他们作为猜测输入的字符是否在单词中使用的循环计数器(刽子手游戏)。它以前有效,在我做了一些小改动之后,它不再按预期工作,而且它的屁股是我根本没有弄乱那个代码,它在别处。本质上,每次循环遇到单词内的用户猜测时,循环计数器都会重置为0,但如果计数器等于单词的长度,则表示未找到用户猜测,应将显示值设置为加一。然而,它现在所做的只是一直保持为零,即使用户输入了一个错误的猜测,这应该将显示值加一,它仍然保持为零。我花了两天时间试图让这部分工作,昨天还在工作,但今天不行,

void playHangman(string wordArray[], bool usedWords[])
{
    string secretWord;
    unsigned seed = time(0);
    srand(seed);
    int wordChoice = (rand()%20);
    int counter = 0;
    int display = 0;
    bool winner = false;
    int wordLength = secretWord.length();
    int count;
    char again;

    do
    {
        while(usedWords[wordChoice])
        {
            if(wordChoice == 19)
                wordChoice = 0;
            else if(counter == 20)
            {
                for(int i = 0; i < SIZE; i++)
                    usedWords[i] = false;
                wordChoice = (rand()%20);
                counter = 0;
            }
            wordChoice++;
            counter++;
        }
        secretWord = wordArray[wordChoice];
        const char *word = new char [secretWord.length()];
        word = secretWord.c_str();
        char *userPrompt = new char [secretWord.length()];
        for(int i = 0; i < secretWord.length(); i++)
            userPrompt[i] = '_';
        userPrompt[secretWord.length()] = '\0';
        char userGuess = '\n';

        while(!winner)
        {
            count = 0;
            for(int i = 0; i < secretWord.length(); i++)
                cout << userPrompt[i] << " ";
            cout << "\n" << endl;
            displayGallows(display);

            if(display == 6)
            {
                cout << "Sorry, you lost!" << endl;
                break;
            }

            cout << "Enter a letter: ";
            cin >> userGuess;
            cin.ignore();
            for(int i = 0; i < secretWord.length(); i++)
            {
                if(word[i] == userGuess)
                {
                    userPrompt[i] = userGuess;
                    count = 0;
                }
                else if(count == (wordLength - 1))
                    display++;
                count++;
            }
            winner = checkWin(word, userPrompt, display, secretWord);       
        }
        again = playAgain();
    }while(again == 'Y' || again =='y');
}

char playAgain()
{
    char playAgain;
    cout << "Would you like to play again? Enter y or n: ";
    cin >> playAgain;
    return playAgain;

}
4

2 回答 2

2

真的有两个问题:

  1. 为什么不重启游戏?答:因为程序认为游戏成功了。您在循环前面设置变量,并且不会重置它们来玩另一个游戏。建议:创建一个实际玩游戏的函数,然后从外循环调用它。在该功能中玩游戏。
  2. 为什么不增加count?不知道。为什么你认为count总是停留在0?但是,似乎条件count == (wordLength - 1)不太可能每次都变为true,因为wordLength设置为恰好为空secretWord时的大小(即设置为)并且之后从未更改。secretWordwordLength0
于 2013-12-15T18:57:48.480 回答
1

要求再次玩可能是由于未重置变量“获胜者”。执行以下操作可能会更正它。

do
{
    winner = false; //set to false at each iteration
    while(usedWords[wordChoice])
    {
        if(wordChoice == 19)
            wordChoice = 0;
        else if(counter == 20)
于 2013-12-15T18:52:36.583 回答