Guessing Game

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
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
#include <iostream>
#include <cstdlib>
#include <ctime>
#include <string>
#include <istream>
using namespace std;
const int MAX_TRIES=5;
int letterFill (char guess, string secretword, string&guessword);
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 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;
 
 		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. */
	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. */
	
	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;
	}
	{
		int matches;  // to hold result of function call.

		matches = ;int letterFill (char guess, string secretword, string &guessword);

		// matches now holds result of letterFill call

		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;
	}
Last edited on
what are the errors?
There are 80 errors in total if you try to run it using dev c++ :(((
Well, might as well start listing them then, I doubt someone is going to find all 80 and list them him or herself.

but here's one or two:
cin >> level >> endl;
You can't use endl like that, it needs to just be
cin >> level;

Also,
1
2
3
4
5
	string word; //Delcared here!
        ....
	if(level == "Easy")
	{
 		string word; //Declared here again, Line 26! Error! 
Last edited on
Thanks dude that helped a lot hehe.
2 errors left: 254 1 [Error] expected '}' at end of input
82 2 [Error] a function-definition is not allowed here before '{' token
ganado: you are wrong. read up on scope. http://coliru.stacked-crooked.com/a/577e4f3e978c3475

Your missing the whole point of functions and their prototypes. You declare your prototype on line 8 and then incorrectly write the actual function multiple times inside your main.

You need to have your function outside your main and call it when needed.

For example:

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

#include <iostream>
using namespace std;

// prototype
int letterFill(char, string, string&);

int main()
{
	int matches;  // to hold result of function call.

	matches = letterFill( /* pass parameters from game here */ );

	// matches now holds result of letterFill call

	return 0;
}


// Your function outside of main.
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;
}


You should have a read about functions: http://www.cplusplus.com/doc/tutorial/functions/

What also may be helpful to you is a hangman I wrote for another user, this will give you some idea on what I mean regarding calling functions and obtaining their return values.

http://www.cplusplus.com/forum/beginner/131952/#msg711121

Hope this helps, take care.



Softrix,
I wrote how you said...
But it's giving an error which says
197 13 [Error] expected primary-expression before ';' token
Last edited on
This is your issue. First off, you're passing values that don't exist.

1
2
3
int matches;  // to hold result of function call.

		matches = ;int letterFill (char guess, string secretword, string &guessword);


Also you don't really need that many comments, it's lowering your codes readability.
Last edited on
Little Bobby Tables, glad you saw my mistake, woops, never had a reason to do anything like that so I just assumed.
no problem ganado ;)
Topic archived. No new replies allowed.