Проблемы с чтением ввода символов и счетчиком циклов

Итак, у меня возникла серьезная проблема, и, потратив на это два дня, я не могу понять, почему она не работает так, как мне кажется.

Первая проблема: у меня есть функция, чтобы узнать, хочет ли игрок играть снова, введя y или 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;

}

0

Решение

Здесь действительно два вопроса:

  1. Почему он не перезапускает игру? Ответ: потому что программа считает, что игра была успешно сыграна. Вы устанавливаете свои переменные перед циклом, и вы не сбрасываете их, чтобы играть в другую игру. Рекомендация: создайте функцию, которая действительно играет в игру, и просто вызовите ее из внешнего цикла. Играть в игру в этой функции.
  2. Почему не увеличивается count? Не знаю. Почему ты думаешь count всегда остается в 0? Тем не менее, кажется, что условие count == (wordLength - 1) вряд ли каждый станет true так как wordLength установлен на размер secretWord когда secretWord бывает пустым (т.е. wordLength установлен в 0) и никогда не менялся впоследствии.
2

Другие решения

Запрос на повторную игру может быть вызван отсутствием сброса переменной «победитель». Выполнение следующих действий может исправить это.

do
{
winner = false; //set to false at each iteration
while(usedWords[wordChoice])
{
if(wordChoice == 19)
wordChoice = 0;
else if(counter == 20)
1

По вопросам рекламы [email protected]