Хорошо, поэтому у меня есть серьезная проблема, и, проведя два дня на этом, я не могу понять, почему он не работает, как мне кажется.Проблемы с чтением ввода символов и счетчиком контуров
Первая проблема: у меня есть функция, чтобы увидеть, хочет ли игрок играть снова, введя 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;
}
Извлеченный урок: используйте исходный репозиторий и сохраните, например, промежуточное промежуточное состояние, чтобы вы могли сравнить, что изменилось, и узнать, что вы сломали, или просто вернуться и продолжить оттуда. [git] (http://git-scm.com/) кажется настоящим модным выбором для исходного репозитория. –