I have tried to make some functions to allow the player to choose the length of word that they would like to play with (choosing between 3 and 7 letters), and it functions fine until the player enters numbers above 5. When they enter 6 or 7, it passes back a word of the last length entered. For example, if I select a 3 letter word on my first play, then, when asked to play again, and I choose 6 letters, it will select the 3 letter word again. If I select 6 or 7 on the first play, it tries to pass back a word of length 0, which is what the WordLength variable is initialised as.
Here are the relevant bits of code:
main.cpp
/*
Lets the player choose the length of the hidden word
*/
void ChooseWordLength() {
FText Response = "";
int32 WordLength = 0;
do { // TODO Account for double figure numbers
// Ask the player to choose a hidden word length
std::cout << "Choose the length of the hidden word, from 3 to 7 letters.\n";
// Take input from player
getline(std::cin, Response);
WordLength = Response[0] - '0';
} while (!(WordLength >= 3) || !(WordLength <= 7)); // Repeat the above if the player's input is invalid
BCGame.SelectHiddenWord(WordLength); // TODO Fix bug - word lengths above 5 give 5 letter word
std::cout << "\nCan you guess the " << BCGame.GetHiddenWordLength() << " letter isogram I'm thinking of?" << std::endl;
return;
}
FBullCowGame.cpp
void FBullCowGame::SelectHiddenWord(int32 WordLength) {
// Cycle through array of words
for (int32 Index = 0; Index < HiddenWords->length(); Index++ ) {
// If the word length matches the input from the player
if (WordLength == HiddenWords[Index].length()) {
// Set hidden word
MyHiddenWord = HiddenWords[Index];
break;
}
}
return;
}
HiddenWords array declaration and initialisation:
FBullCowGame.h
private:
bool IsIsogram(FString Word) const;
bool IsLowercase(FString Word) const;
// See constructor for initialisation
int32 MyCurrentTry;
FString HiddenWords[5]; // TODO Replace magic number
FString MyHiddenWord;
bool bGameIsWon;
FBullCowGame.cpp
void FBullCowGame::Reset() {
const FString HIDDEN_WORDS[5] = { "ant", "shoe", "eight", "planet", "qualify" }; // TODO Replace magic number // This MUST be an isogram
for (int32 Index = 0; Index < HIDDEN_WORDS->length(); Index++) {
HiddenWords[Index] = HIDDEN_WORDS[Index];
}
//MyHiddenWord = HIDDEN_WORDS[0];
MyCurrentTry = 1;
bGameIsWon = false;
return;
}
I know, thanks to debugging, that the correct value for WordLength is being passed into SelectHiddenWord, so I am sure that it must be somewhere in that function that the problem is occurring. Any help would be greatly appreciated.