We are all tired of from our daily lives. So I suggest to sit back and
play this game. I present here a hangman game( text version ) for
your enjoyment. There might be some bugs as I haven't throughly
tested it, so sorry if you find it( I'm sure you can fix it ). Happy late
Chinese new year! P.S no cheating, and get your vocabs up...
Have some fun and play hangman
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
#include <cctype>
#include <ctime>
using namespace std;
//use if supported, else comment it out
#define SYSTEM_CLS_SUPPORTED
class GameWords{
private:
std::vector<string> listOfWords;
public:
GameWords(){_init();}
string getNext(){
if(!listOfWords.empty()){
string str = listOfWords.back();
listOfWords.pop_back();
return str;
}
return "";
}
bool empty(){ return listOfWords.empty(); }
private:
//LOOK AWAY THIS IS PRIVATE!!!
void _init(){
listOfWords.push_back("forbidden"); listOfWords.push_back("needle");
listOfWords.push_back("guessing"); listOfWords.push_back("gossips");
listOfWords.push_back("justifiable"); listOfWords.push_back("complains");
listOfWords.push_back("whatsoever"); listOfWords.push_back("specimen");
listOfWords.push_back("isothermic"); listOfWords.push_back("uncounted");
listOfWords.push_back("dabbler"); listOfWords.push_back("quaternion");
listOfWords.push_back("laminated"); listOfWords.push_back("overwise");
listOfWords.push_back("unwarranted"); listOfWords.push_back("containing ");
listOfWords.push_back("sleeveless"); listOfWords.push_back("sequence ");
listOfWords.push_back("asterisks"); listOfWords.push_back("alphabetical");
listOfWords.push_back("numerical "); listOfWords.push_back("according");
listOfWords.push_back("instantitations");listOfWords.push_back("template");
std::random_shuffle(listOfWords.begin(),listOfWords.end());
}
};
template<typename Type>
void print(const Type& arg,const string& endWith = ""){
cout << arg;
if(!endWith.empty())
cout << endWith;
}
void print(){
print('\n');
}
template<typename Type>
Type getType(){
Type var;
while(!(cin >> var)){
cin.clear();
while(cin.get() != '\n') continue;
print("\nError inputted, try to input again :");
}
return var;
}
void clearScreen(const size_t scale = 25){
for(size_t i = 0; i < scale; ++i)
print('\n');
}
int main()
{
srand(time(0));
GameWords words;
const char EMPTY_CHAR = '*';
bool isGameOver = false;
bool playAgain = true;
while(playAgain && !words.empty())
{
string usedLetters;
string winningWord = words.getNext();
string accumulatedLetters(winningWord.size(),EMPTY_CHAR);
while(!isGameOver)
{
print("\nMystery Word : " + accumulatedLetters);
print("\nGuessed letters : " );
std::copy(usedLetters.begin(),usedLetters.end(),std::ostream_iterator<char>(cout,","));
print("\nGuess number : ");
print(usedLetters.size(),"\n");
print();
print("Enter a letter : ");
char letter = getType<char>();
while(!isalpha(letter)){
print("\nNot Valid character, try again : ");
letter = getType<char>();
}
while(usedLetters.find_first_of(letter) != string::npos){
print("\nLetter already entered, try again : ");
letter = getType<char>();
}
usedLetters.push_back(letter);
while(winningWord.find_first_of(letter) != string::npos){
size_t pos = winningWord.find_first_of(letter);
winningWord[pos] = EMPTY_CHAR;
accumulatedLetters[pos] = letter;
}
if(winningWord.find_first_not_of(EMPTY_CHAR) == string::npos) {
isGameOver = true;
break;
}
}
print("\n\n");
print("\n\n");
print("It took you ");
print(usedLetters.size());
print(" guesses to guess the correct answer : \"" + accumulatedLetters + "\"\n");
print("\n\n");
print("Play Again<y,n> : ");
char ch = 0;
while(ch != 'y' && ch != 'n'){
print("\nInvalid input, try again : ");
ch = tolower(getType<char>());
}
if(ch == 'y'){
isGameOver = false;
clearScreen();
#if defined(SYSTEM_CLS_SUPPORTED)
system("cls");
#endif
}
else
playAgain = false;
}
print("\n\nThanks 4 playin...and get you vocabs up...\n\n");
return 0;
}
Be a part of the DaniWeb community
We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, networking, learning, and sharing knowledge.