View Single Post
Old Nov 15th, 2006, 3:38 PM   #9
aznballerlee
Hobbyist Programmer
 
Join Date: Nov 2006
Posts: 111
Rep Power: 2 aznballerlee is on a distinguished road
I did fix my code:

#define _CRT_SECURE_NO_DEPRECATE
#include <iostream>
#include <fstream>
#include <cstring>
#include <cctype>
#include <cstdlib>
#include <ctime>

using namespace std;

const int MAXWORDS = 8000;
const int MAXWORDLENGTH = 6;
const int MINWORDLENGTH = 4;
int nWords;

void fillWords(char words[][MAXWORDLENGTH + 1], int maxwords, int& num);
int playOneRound (int wordnum);
void correct (int i);

char wordList [MAXWORDS][MAXWORDLENGTH + 1];

// fills the wordList array
void fillWords(char words[][MAXWORDLENGTH+1], int MAXWORDS, int& num) 
{
	ifstream wordfile("C:/words.txt");
	if ( ! wordfile)
	{
		cout << "Cannot open words.txt!" << endl;
		exit(1);
	}
	char line[10000];
	num = 0;
	while (wordfile.getline(line, 10000))
	{
		if (num == MAXWORDS)
		{
			cout << "Using only the first " << num
				<< " words from words.txt" << endl;
			break;
		}
		int k;
		for (k = 0; islower(line[k]); k++)
			;
		if (line[k] == '\0'  &&  k >= MINWORDLENGTH  &&  k <= MAXWORDLENGTH)
		{
			strcpy(words[num], line);
			num++;
		}
	}
}

int myRand(int myLimit)
{
	return std::rand() % myLimit;
}


// choose a secret word
// check to see if secret word is in wordList
// if in, type in a guess
// count the number of correct characters in guess
int playOneRound (int wordnum)
{                                                                           
	char guess[MAXWORDLENGTH+1];
	int i;
	int h;
	do
	{
		cout << "Probe: ";
		cin >> guess;

		for (int b=0; b < strlen(guess); b++)
		{
			if (isupper(guess[b]))
				cout << "Your probe must be a word of 4 to 6 lower case letters" << endl;
			break;
		}

		for (i=0; i < MAXWORDS; i++)
		{
			if (strcmp (wordList[wordnum], guess) == 0)  
			{	
				correct(i);
				break;
			}
			else                                                      
			{	
				for (h=0; h < MAXWORDS; h++)
				{
					if ( strcmp (wordList[h], guess) == 0 )        
					{	
						int numCorrect = 0;                              
						bool boolArray [MAXWORDLENGTH] = {false};       
						for (int z=0; z < MAXWORDLENGTH; z++)            
						{
							for (int j=0; j < MAXWORDLENGTH; j++)       
							{
								if ((guess[z] == wordList[wordnum][j]) && (boolArray[j] == false)&& (guess[z] != '\0'))   
								{	
									boolArray [j] = true;
									break;                              
								}							
							}
						}
						for (int a=0; a < MAXWORDLENGTH; a++)
						{
							if ( boolArray [a])
								numCorrect++;
						}
						cout << numCorrect << endl;
						break;
					}
				}	

				if ( strcmp (wordList[h], guess) != 0 )        
			{				
				cout << "I don't know that word" << endl;       
				break;

			}
			// 

			// wordList[wornum]

		}
	}while (strcmp (wordList[wordnum], guess) != 0);
	return i;
}		

void correct (int i)
{
	cout << "You got it in " << i+1 << " probes" << endl;
	
}


int main ()
{
	fillWords (wordList, MAXWORDS, nWords);

	int rounds;
	cout << "How many rounds do you want to play? ";
	cin >> rounds;

	if (rounds < 0)
	{	
		cout << "Number of rounds must be positive" << endl;
		exit (1);
	}

	for (int a=1; a < rounds+1; a++)
	{
		cout << "Round " << a << endl;
		
		int result = playOneRound (myRand(10));
		cout << result << endl;

	}

	return 0;
}

It does now return values (correct ones). The reason my previous didn't work was that I have a return numCorrect, and that exited the function once it happened.

I do have another question if you don't mind helping me on.



I have to enter in "The Secret word is ___ letters long" right after the Round __ and before the probe input.

Any idea where to put that?
My idea is to use strlen (wordList[wordnum]), but I have to access the secret word (wordList[wordnum]) first, possibly in my main function?

Any ideas of how to go from here?
aznballerlee is offline   Reply With Quote