好的,所以我在这里遇到了一个大问题,在花了两天时间之后,我不知道为什么它没有像我认为的那样工作。
第一个问题:我有一个函数可以通过输入 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;
}