I have the following C++ program:
#include <iostream>
#include <cstdlib>
#include <ctime>
#include <vector>
void printVector (std::vector<int>& vec)
{
for (int a = 0; a < vec.size(); a++)
std::cout << (char)vec[a] << ", ";
}
int main ()
{
const std::string HANGMAN[] = {"\n------+",
"\n |\n |\n |\n |\n |\n------+",
"\n ---+\n |\n |\n |\n |\n |\n------+",
"\n ---+\n | |\n |\n |\n |\n |\n------+",
"\n ---+\n | |\n O |\n |\n |\n |\n------+",
"\n ---+\n | |\n O |\n | |\n |\n |\n------+",
"\n ---+\n | |\n O |\n /| |\n |\n |\n------+",
"\n ----\n | |\n O |\n /|\\ |\n |\n |\n-------",
"\n ----\n | |\n O |\n /|\\ |\n / |\n |\n-------",
"\n ----\n | |\n O |\n /|\\ |\n / \\ |\n |\n-------"};
const std::string WORDS[] = {"zigzagging", "wigwagging", "grogginess", "beekeeping", "mummifying",
"fluffiness", "fulfilling", "shabinness", "revivified", "kobnobbing",
"beekeepers", "wheeziness", "shagginess", "sleeveless", "parallaxes",
"woolliness", "chumminess", "skyjacking", "grubbiness", "wobbliness",
"feebleness", "jaywalking", "alkalizing", "blabbering", "overjoying"};
srand(time(0));
std::string compWord = WORDS[rand() % 25];
char compHiddenWord[] = "----------";
int hangmanPos = 0;
std::vector<int> guessed;
char userGuess;
bool letterCorrect;
while (hangmanPos != 9)
{
std::cout << "\nThis is your hangman:\n" << HANGMAN[hangmanPos] <<
"\n\nThese are the letters you've already guessed:\n\n";
printVector(guessed);
std::cout << "\n\nThis is my word:\n\n" << compHiddenWord <<
"\n\nGuess a letter: ";
std::cin >> userGuess;
guessed.push_back(userGuess);
letterCorrect = false;
for (int a = 0; a < compWord.size(); a++)
if (compWord[a] == userGuess)
{
if (letterCorrect == false)
{
std::cout << userGuess << " is in my word!\n\n\n";
letterCorrect = true;
}
compHiddenWord[a] = userGuess;
}
if (letterCorrect == false)
{
std::cout << "Oops! " << userGuess << " is not in my word.";
hangmanPos++;
}
else
for (int a = 0; a < compWord.size(); a++)
if (compWord == compHiddenWord)
{
std::cout << "Well done, " << compWord << " was my word!";
return 0;
}
}
std::cout << "\nOh Dear! Looks like you've been hanged. My word was actually " << compWord << ".";
}
Which is supposed to replicate the classic game of hangman visually. Is the code fully optimized? Is there an other way I could improve it?