fork download
  1. #include <iostream>
  2. #include <vector>
  3. #include <algorithm>
  4. using namespace std;
  5.  
  6. class Hangman
  7. {
  8. private:
  9. const std::string word;
  10. vector<char> correctLetters;
  11. vector<char> incorrectGuess;
  12.  
  13. bool letterExistsInCorrectLetters(const char letter) const
  14. {
  15. if (std::find(correctLetters.begin(), correctLetters.end(), letter) != correctLetters.end())
  16. {
  17. return true;
  18. }
  19. return false;
  20. }
  21.  
  22. bool letterExistsInWord(const char letter) const
  23. {
  24. if (word.find_first_of(letter) != std::string::npos)
  25. {
  26. return true;
  27. }
  28. return false;
  29. }
  30.  
  31. bool isAlreadyPlayed(const char letter) const
  32. {
  33. if (std::find(correctLetters.begin(), correctLetters.end(), letter) != correctLetters.end())
  34. {
  35. return true;
  36. }
  37.  
  38. if (std::find(incorrectGuess.begin(), incorrectGuess.end(), letter) != incorrectGuess.end())
  39. {
  40. return true;
  41. }
  42.  
  43. return false;
  44. }
  45.  
  46. void printIncorrectLetters() const
  47. {
  48. std::cout << "Incorrect Letters so far: ";
  49. for (vector<char>::const_iterator
  50. iter = incorrectGuess.begin();
  51. iter != incorrectGuess.end();
  52. ++iter)
  53. {
  54. std::cout << " " << *iter << " ";
  55. }
  56. std::cout << std::endl;
  57. }
  58.  
  59. public:
  60. Hangman(const std::string &word_)
  61. : word(word_)
  62. {
  63. correctLetters.push_back(' ');
  64. }
  65.  
  66. bool play(const char letter)
  67. {
  68. if (isAlreadyPlayed(letter))
  69. {
  70. std::cerr << "Letter already played" << std::endl;
  71. return false;
  72. }
  73. if (letterExistsInWord(letter))
  74. {
  75. correctLetters.push_back(letter);
  76. }
  77. else
  78. {
  79. incorrectGuess.push_back(letter);
  80. }
  81.  
  82. return true;
  83. }
  84.  
  85. void print() const
  86. {
  87. for (int i = 0; i < this->word.size(); ++i)
  88. {
  89. if (letterExistsInCorrectLetters(word[i]))
  90. {
  91. std::cout << " " << word[i] << " ";
  92. }
  93. else
  94. {
  95. std::cout << " _ ";
  96. }
  97. }
  98. std::cout << std::endl;
  99. this->printIncorrectLetters();
  100. }
  101.  
  102. bool isWin() const
  103. {
  104. for (int i = 0; i < this->word.size(); ++i)
  105. {
  106. if (!letterExistsInCorrectLetters(word[i]))
  107. {
  108. return false;
  109. }
  110. }
  111. std::cout << "You Won !!!" << std::endl;
  112. return true;
  113. }
  114.  
  115. bool isLost() const
  116. {
  117. if (incorrectGuess.size() > 9)
  118. {
  119. return true;
  120. }
  121. return false;
  122. }
  123. };
  124.  
  125. int main() {
  126. // your code goes here
  127. Hangman h("jack sparrow");
  128.  
  129. while ( !h.isLost())
  130. {
  131. char guess;
  132. std::cout << "Guess Letter: ";
  133. std::cin >> guess;
  134. bool res = h.play(guess);
  135.  
  136. h.print();
  137.  
  138. if (h.isWin())
  139. {
  140. break;
  141. }
  142. }
  143. if (h.isLost())
  144. {
  145. std::cout << "You have lost" << std::endl;
  146. }
  147. return 0;
  148. }
  149.  
Success #stdin #stdout 0s 3236KB
stdin
j a c k s p r o w
stdout
Guess Letter:  j  _  _  _     _  _  _  _  _  _  _ 
Incorrect Letters so far: 
Guess Letter:  j  a  _  _     _  _  a  _  _  _  _ 
Incorrect Letters so far: 
Guess Letter:  j  a  c  _     _  _  a  _  _  _  _ 
Incorrect Letters so far: 
Guess Letter:  j  a  c  k     _  _  a  _  _  _  _ 
Incorrect Letters so far: 
Guess Letter:  j  a  c  k     s  _  a  _  _  _  _ 
Incorrect Letters so far: 
Guess Letter:  j  a  c  k     s  p  a  _  _  _  _ 
Incorrect Letters so far: 
Guess Letter:  j  a  c  k     s  p  a  r  r  _  _ 
Incorrect Letters so far: 
Guess Letter:  j  a  c  k     s  p  a  r  r  o  _ 
Incorrect Letters so far: 
Guess Letter:  j  a  c  k     s  p  a  r  r  o  w 
Incorrect Letters so far: 
You Won !!!