Hangman--Country Guessing Game

#include <iostream>
#include <cstdlib>
#include <ctime>
#include <string>
using namespace std;
const int MAX_TRIES=5;
int letterFill (char, string, string&);
int main ()
{
string name;
char letter;
int num_of_wrong_guesses=0;
string word;
string words[] =
{
"india",
"japan",
"nepal",
"china",
"madagascar",
"azerbaijan",
"kyrgyzstan",
"turkmenistan",
"french guiana",
"new caledonia"
};
//choose and copy a word from array of words randomly
int n=rand()% 10;
word=words[n];
// Initialize the secret word with the * character.
string unknown(word.length(),'*');
// welcome the user
cout << "\n\nWelcome to hangman!! Guess a country that comes into your mind.";
cout << "\n\nEach letter is represented by an asterisk.";
cout << "\n\nYou have to type only one letter in one try.";
cout << "\n\nYou have " << MAX_TRIES << " tries to try and guess the country.";
cout << "\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~";
// Loop until the guesses are used up
while (num_of_wrong_guesses < MAX_TRIES)
{
cout << "\n\n" << unknown;
cout << "\n\nGuess a letter: ";
cin >> letter;
// Fill secret word with letter if the guess is correct,
// otherwise increment the number of wrong guesses.
if (letterFill(letter, word, unknown)==0)
{
cout << endl << "Whoops! That letter isn't in there!" << endl;
num_of_wrong_guesses++;
}
else
{
cout << endl << "You found a letter! Isn't that exciting?" << endl;
}
// Tell user how many guesses has left.
cout << "You have " << MAX_TRIES - num_of_wrong_guesses;
cout << " guesses left." << endl;
// Check if user guessed the word.
if (word==unknown)
{
cout << word << endl;
cout << "Yeah! You got it!";
break;
}
}
if(num_of_wrong_guesses == MAX_TRIES)
{
cout << "\nSorry, you lose...you've been hanged." << endl;
cout << "The word was : " << word << endl;
}
cin.ignore();
cin.get();
return 0;
}
/* Take a one character guess and the secret word, and fill in the
unfinished guessword. Returns number of characters matched.
Also, returns zero if the character is already guessed. */
int letterFill (char guess, string secretword, string &guessword)
{
int i;
int matches=0;
int len=secretword.length();
for (i = 0; i< len; i++)
{
// Did we already match this letter in a previous guess?
if (guess == guessword[i])
return 0;
// Is the guess in the secret word?
if (guess == secretword[i])
{
guessword[i] = guess;
matches++;
}
}
return matches;
}


***Please help me to put the difficulty level. I don't know what would be the correct codes and where to put it. I'm just a beginner help me please cause it's for my project. Thanks in advance. :)
What do you mean by "help me to put the difficulty level"?

Do you mean you want to implement multiple difficulty levels?
If you want to do that, I would suggest creating a table to words and difficulty levels.
Example:
1
2
3
4
5
6
7
8
9
10
11
 
struct 
{ int  dif_lvl;
   string word;
} words[] = { 1, "india",
                      1, "japan", 
                      2, "nepal", 
                      1, "china",
                      3, "madagascar" 
//  ... etc 
                   };


PLEASE USE CODE TAGS (the <> formatting button) when posting code.
http://v2.cplusplus.com/articles/jEywvCM9/
It makes it easier to read your code and it also makes it easier to respond to your post.
Last edited on

#include <iostream>
#include <cstdlib>
#include <ctime>
#include <string>
using namespace std;
const int MAX_TRIES=5;
int letterFill (char, string, string&);
int main ()
{
string name;
char letter;
int num_of_wrong_guesses=0;
string word;
// welcome the user
cout << "\n\nWelcome to hangman!! Guess a country that comes into your mind.";
// Ask user for for Easy, Average, Hard
string level;
cout <<"\nChoose a LEVEL(E - Easy, A - Average, H - Hard):" << endl;
cin >> level >> endl;
// compare level
if(level == "Easy")
{
//put all the string inside the array here
string easy[] = {"india","japan","nepal","china"};
string word;

srand(time(NULL));

int n=rand()% 4;

word=easy[n];

//call the function here for guessing game
// Initialize the secret word with the * character.
string unknown(word.length(),'*');
cout << "\n\nEach letter is represented by an asterisk.";
cout << "\n\nYou have to type only one letter in one try.";
cout << "\n\nYou have " << MAX_TRIES << " tries to try and guess the country.";
cout << "\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~";
// Loop until the guesses are used up
while (num_of_wrong_guesses < MAX_TRIES)
{
cout << "\n\n" << unknown;
cout << "\n\nGuess a letter: ";
cin >> letter;
// Fill secret word with letter if the guess is correct,
// otherwise increment the number of wrong guesses.
if (letterFill(letter, word, unknown)==0)
{
cout << endl << "Whoops! That letter isn't in there!" << endl;
num_of_wrong_guesses++;
}
else
{
cout << endl << "You found a letter! Isn't that exciting?" << endl;
}
// Tell user how many guesses has left.
cout << "You have " << MAX_TRIES - num_of_wrong_guesses;
cout << " guesses left." << endl;
// Check if user guessed the word.
if (word==unknown)
{
cout << word << endl;
cout << "Yeah! You got it!";
break;
}
}
if(num_of_wrong_guesses == MAX_TRIES)
{
cout << "\nSorry, you lose...you've been hanged." << endl;
cout << "The word was : " << word << endl;
}
cin.ignore();
cin.get();
return 0;
}
/* Take a one character guess and the secret word, and fill in the
unfinished guessword. Returns number of characters matched.
Also, returns zero if the character is already guessed. */
int letterFill (char guess, string secretword, string &guessword)
{
int i;
int matches=0;
int len=secretword.length();
for (i = 0; i< len; i++)
{
// Did we already match this letter in a previous guess?
if (guess == guessword[i])
return 0;
// Is the guess in the secret word?
if (guess == secretword[i])
{
guessword[i] = guess;
matches++;
}
}
return matches;
}
else if (level == "Average")
{
//put all the string inside the array here
string average[] = {"madagascar","azerbaijan","kyrgyzstan"};

srand(time(NULL));
int n=rand()% 3;

word=average[n];

//call the function here for guessing game
// Initialize the secret word with the * character.
string unknown(word.length(),'*');
cout << "\n\nEach letter is represented by an asterisk.";
cout << "\n\nYou have to type only one letter in one try.";
cout << "\n\nYou have " << MAX_TRIES << " tries to try and guess the country.";
cout << "\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~";
// Loop until the guesses are used up
while (num_of_wrong_guesses < MAX_TRIES)
{
cout << "\n\n" << unknown;
cout << "\n\nGuess a letter: ";
cin >> letter;
// Fill secret word with letter if the guess is correct,
// otherwise increment the number of wrong guesses.
if (letterFill(letter, word, unknown)==0)
{
cout << endl << "Whoops! That letter isn't in there!" << endl;
num_of_wrong_guesses++;
}
else
{
cout << endl << "You found a letter! Isn't that exciting?" << endl;
}
// Tell user how many guesses has left.
cout << "You have " << MAX_TRIES - num_of_wrong_guesses;
cout << " guesses left." << endl;
// Check if user guessed the word.
if (word==unknown)
{
cout << word << endl;
cout << "Yeah! You got it!";
break;
}
}
if(num_of_wrong_guesses == MAX_TRIES)
{
cout << "\nSorry, you lose...you've been hanged." << endl;
cout << "The word was : " << word << endl;
}
cin.ignore();
cin.get();
return 0;
}
/* Take a one character guess and the secret word, and fill in the
unfinished guessword. Returns number of characters matched.
Also, returns zero if the character is already guessed. */
int letterFill (char guess, string secretword, string &guessword)
{
int i;
int matches=0;
int len=secretword.length();
for (i = 0; i< len; i++)
{
// Did we already match this letter in a previous guess?
if (guess == guessword[i])
return 0;
// Is the guess in the secret word?
if (guess == secretword[i])
{
guessword[i] = guess;
matches++;
}
}
return matches;
}
else if(level == "Hard")
{
//put all the string inside the array here
string hard[] = {"turkmenistan","french guiana","new caledonia"};

srand(time(NULL));

int n=rand()% 3;

word=hard[n];

//call the function here for guessing game
// Initialize the secret word with the * character.
string unknown(word.length(),'*');
cout << "\n\nEach letter is represented by an asterisk.";
cout << "\n\nYou have to type only one letter in one try.";
cout << "\n\nYou have " << MAX_TRIES << " tries to try and guess the country.";
cout << "\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~";
// Loop until the guesses are used up
while (num_of_wrong_guesses < MAX_TRIES)
{
cout << "\n\n" << unknown;
cout << "\n\nGuess a letter: ";
cin >> letter;
// Fill secret word with letter if the guess is correct,
// otherwise increment the number of wrong guesses.
if (letterFill(letter, word, unknown)==0)
{
cout << endl << "Whoops! That letter isn't in there!" << endl;
num_of_wrong_guesses++;
}
else
{
cout << endl << "You found a letter! Isn't that exciting?" << endl;
}
// Tell user how many guesses has left.
cout << "You have " << MAX_TRIES - num_of_wrong_guesses;
cout << " guesses left." << endl;
// Check if user guessed the word.
if (word==unknown)
{
cout << word << endl;
cout << "Yeah! You got it!";
break;
}
}
if(num_of_wrong_guesses == MAX_TRIES)
{
cout << "\nSorry, you lose...you've been hanged." << endl;
cout << "The word was : " << word << endl;
}
cin.ignore();
cin.get();
return 0;
}
/* Take a one character guess and the secret word, and fill in the
unfinished guessword. Returns number of characters matched.
Also, returns zero if the character is already guessed. */
int letterFill (char guess, string secretword, string &guessword)
{
int i;
int matches=0;
int len=secretword.length();
for (i = 0; i< len; i++)
{
// Did we already match this letter in a previous guess?
if (guess == guessword[i])
return 0;
// Is the guess in the secret word?
if (guess == secretword[i])
{
guessword[i] = guess;
matches++;
}
}
return matches;
}

**I don't get it why I'm getting so many errors
Well, let's take a look...

Alright, I see the build errors. Easy ones would be the fact that you can't count braces; if you actually intent out your code (whitespace isn't restricted whatsoever here, so go crazy with it) you will easily see where you forgot a closing brace. That, and you use cin to input a string instead of getline. That's just the build errors, though.

And use code tags!
You've been asked twice to use code tags.

I'm not going to respond to your post until you do so. It's impossible to point to specific lines that have problems without line numbers (provided automatically by code tags).

Hint: You can edit your second post, highlight all of your code and press the <> formatting button to the right of the text entry box.

Last edited on

If you actually listened and took my advice from your double post then you would have solved this issue already. Refer to this post: http://www.cplusplus.com/forum/beginner/136906/#msg727719

I would strongly suggest you read up on functions (link in that post) because you don't seem to grasp how they work. Anyway, taking what I said in my previous post your code would look like below. However, there is a lot of repeated code (i.e. each level has pretty much the same code) which could be improved a lot.

As AbstractionAnon and Ispil have stated, use code tags - it makes your code so much easier to read for those who are considering helping you.

Lastly before I link the code, you should only use srand once in your code and not multiple times, place it at the top of your main function.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210

#include <iostream>
#include <cstdlib>
#include <ctime>
#include <string>
using namespace std;
const int MAX_TRIES = 5;
int letterFill(char, string, string&);


int main()
{
	string name;
	char letter;
	int num_of_wrong_guesses = 0;
	string word;

	srand(time(NULL));   // ONLY NEED THIS ONCE!

	// welcome the user
	cout << "\n\nWelcome to hangman!! Guess a country that comes into your mind.";
	// Ask user for for Easy, Average, Hard
	string level;
	cout << "\nChoose a LEVEL(E - Easy, A - Average, H - Hard):" << endl;
	cin >> level;

	// compare level 
	if (level == "Easy")
	{
		//put all the string inside the array here
		string easy[] = { "india", "japan", "nepal", "china" };
		string word;

		int n = rand() % 4;
		word = easy[n];

		//call the function here for guessing game
		// Initialize the secret word with the * character.
		string unknown(word.length(), '*');
		cout << "\n\nEach letter is represented by an asterisk.";
		cout << "\n\nYou have to type only one letter in one try.";
		cout << "\n\nYou have " << MAX_TRIES << " tries to try and guess the country.";
		cout << "\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~";
		// Loop until the guesses are used up
		while (num_of_wrong_guesses < MAX_TRIES)
		{
			cout << "\n\n" << unknown;
			cout << "\n\nGuess a letter: ";
			cin >> letter;
			// Fill secret word with letter if the guess is correct,
			// otherwise increment the number of wrong guesses.
			if (letterFill(letter, word, unknown) == 0)
			{
				cout << endl << "Whoops! That letter isn't in there!" << endl;
				num_of_wrong_guesses++;
			}
			else
			{
				cout << endl << "You found a letter! Isn't that exciting?" << endl;
			}
			// Tell user how many guesses has left.
			cout << "You have " << MAX_TRIES - num_of_wrong_guesses;
			cout << " guesses left." << endl;
			// Check if user guessed the word.
			if (word == unknown)
			{
				cout << word << endl;
				cout << "Yeah! You got it!";
				break;
			}
		}
		if (num_of_wrong_guesses == MAX_TRIES)
		{
			cout << "\nSorry, you lose...you've been hanged." << endl;
			cout << "The word was : " << word << endl;
		}
		cin.ignore();
		cin.get();
		return 0;
	}

	else if (level == "Average")
	{
		//put all the string inside the array here
		string average[] = { "madagascar", "azerbaijan", "kyrgyzstan" };

		int n = rand() % 3;
		word = average[n];

		//call the function here for guessing game
		// Initialize the secret word with the * character.
		string unknown(word.length(), '*');
		cout << "\n\nEach letter is represented by an asterisk.";
		cout << "\n\nYou have to type only one letter in one try.";
		cout << "\n\nYou have " << MAX_TRIES << " tries to try and guess the country.";
		cout << "\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~";
		// Loop until the guesses are used up
		while (num_of_wrong_guesses < MAX_TRIES)
		{
			cout << "\n\n" << unknown;
			cout << "\n\nGuess a letter: ";
			cin >> letter;
			// Fill secret word with letter if the guess is correct,
			// otherwise increment the number of wrong guesses.
			if (letterFill(letter, word, unknown) == 0)
			{
				cout << endl << "Whoops! That letter isn't in there!" << endl;
				num_of_wrong_guesses++;
			}
			else
			{
				cout << endl << "You found a letter! Isn't that exciting?" << endl;
			}
			// Tell user how many guesses has left.
			cout << "You have " << MAX_TRIES - num_of_wrong_guesses;
			cout << " guesses left." << endl;
			// Check if user guessed the word.
			if (word == unknown)
			{
				cout << word << endl;
				cout << "Yeah! You got it!";
				break;
			}
		}
		if (num_of_wrong_guesses == MAX_TRIES)
		{
			cout << "\nSorry, you lose...you've been hanged." << endl;
			cout << "The word was : " << word << endl;
		}
		cin.ignore();
		cin.get();
		return 0;
	}

	else if (level == "Hard")
	{
		//put all the string inside the array here
		string hard[] = { "turkmenistan", "french guiana", "new caledonia" };

		int n = rand() % 3;
		word = hard[n];

		//call the function here for guessing game
		// Initialize the secret word with the * character.
		string unknown(word.length(), '*');
		cout << "\n\nEach letter is represented by an asterisk.";
		cout << "\n\nYou have to type only one letter in one try.";
		cout << "\n\nYou have " << MAX_TRIES << " tries to try and guess the country.";
		cout << "\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~";
		// Loop until the guesses are used up
		while (num_of_wrong_guesses < MAX_TRIES)
		{
			cout << "\n\n" << unknown;
			cout << "\n\nGuess a letter: ";
			cin >> letter;
			// Fill secret word with letter if the guess is correct,
			// otherwise increment the number of wrong guesses.
			if (letterFill(letter, word, unknown) == 0)
			{
				cout << endl << "Whoops! That letter isn't in there!" << endl;
				num_of_wrong_guesses++;
			}
			else
			{
				cout << endl << "You found a letter! Isn't that exciting?" << endl;
			}
			// Tell user how many guesses has left.
			cout << "You have " << MAX_TRIES - num_of_wrong_guesses;
			cout << " guesses left." << endl;
			// Check if user guessed the word.
			if (word == unknown)
			{
				cout << word << endl;
				cout << "Yeah! You got it!";
				break;
			}
		}
		if (num_of_wrong_guesses == MAX_TRIES)
		{
			cout << "\nSorry, you lose...you've been hanged." << endl;
			cout << "The word was : " << word << endl;
		}
		cin.ignore();
		cin.get();
		return 0;
	}

}

// as I said in my previous post, read up on functions!
int letterFill(char guess, string secretword, string &guessword)
{
	int i;
	int matches = 0;
	int len = secretword.length();
	for (i = 0; i< len; i++)
	{
		// Did we already match this letter in a previous guess?
		if (guess == guessword[i])
			return 0;
		// Is the guess in the secret word?
		if (guess == secretword[i])
		{
			guessword[i] = guess;
			matches++;
		}
	}
	return matches;
}
Topic archived. No new replies allowed.