Categories: MSDN / DotNet / Java / Scripts / Linux / PHP Ask - La ask - La Answer

Omg please Help!

Hey there guys I'm new to java OOP and im not very good at it at all. I have a uni assignment due in soon which i mostly completed but I'am stuck on this questions which ask us to make a guessword game. this is the problem

Problem 3 The Guess-a-Word Game (15% implementation, 10%
design, code, layout and comments)
The guess-a-word game, as the name suggests, is a game of guessing words. You will be playing
this game with the computer in charge of the game. Suppose the word you have to guess is:
PROGRAMMING
The computer would start by displaying the word with each letter replaced by an asterisk:

***********
Number of mistakes = 0
Wrongly guessed letters =
Letters available = ABCDEFGHIJKLMNOPQRSTUVWXYZ

That display means that so far you have not made any mistakes and the set of wrongly guessed
letters is empty.

You are then asked to play a letter. Suppose you play letter M. The computer would display:

******MM***
Number of mistakes = 0
Wrongly guessed letters =
Letters available = ABCDEFGHIJKLNOPQRSTUVWXYZ

Next suppose you play letter E which is not one of the letters of the word. Then the computer
would display:
******MM***
Number of mistakes = 1
Wrongly guessed letters = E
Letters available = ABCDFGHIJKLNOPQRSTUVWXYZ

And so on until you successfully guess all the letters in the word, or until you make nine
mistakes.

You are required to do the following:

First, design and create a class called GuessWord to represent a game. (If you freeze the
game at a point in time and observe its state, then what do you see? What would constitute
the state of the game? How would the game change its state?)

Second, provide a text-based interface program called GuessWordTest that will allow the
user to play the game once. The text-based interface program should use the class you create
in step 1. The interface will ask for a word to guess (that is entered at the keyboard), then
the dialog between the user and the program is similar to that described above.

And here is the coding i have done so far

public class GuessWord
{
private String word;
private char letterguessed;
private int numberOfMistakes;
private char wronglyGuessLetters;
private String[] hiddenWord = new String[word.length()];
private char[] lettersAvalible = new char[26];

public GuessWord(String word, char letterguessed)

{
this.letterguessed = letterguessed;
this.word = word;
numberOfMistakes = 0;
wronglyGuessLetters = (char)0;
for( int i = 0; i < word.length(); i++)
{
hiddenWord[i] = "*";
}
for( int j = 0; j < lettersAvalible.length; j++ )
{
lettersAvalible[j] = (char)('A' + j);
}
}

public void displayWord()

{
hiddenWord = new String[word.length()];
for ( int i = 0; i < hiddenWord.length; i++)
{
if ( letterguessed != word.charAt(i) )
{
hiddenWord[i] = "*";
}
else
{
hiddenWord[i] += (char)letterguessed;
}

}
}

public void checkGuess(int count)

{
for ( int i = 0; i <= word.length(); i++)
{

if ( letterguessed != word.charAt(i) )
{
count++;
}

if ( count == word.length() )
{
numberOfMistakes++;
wronglyGuessLetters += (char)letterguessed;
}

}
if( numberOfMistakes == 9 )
{
System.out.println("\nGAME OVER");
}

}

public void lettersLeft()

{
for ( int i = 0; i < lettersAvalible.length; i++ )
{
if ( letterguessed == lettersAvalible[i] )
{
lettersAvalible[i] = (char)' ';
}

}
}

public String toString()

{
return( hiddenWord + "\nNumber of mistakes = " + numberOfMistakes + "\nWrongly guessed letters = "
+ wronglyGuessLetters + "\nLetters available = " + lettersAvalible);
}

}

Then my text based interface is

import java.util.*;
public class GuessWordTest
{
public static void main(String[] args)
{
System.out.println("Please insert a word to be guessed");
Scanner keyboard = new Scanner(System.in);
int i = 0;
String word = keyboard.nextLine();
System.out.println("please guess a letter");
char letterguessed = (char)keyboard.nextLine().charAt(0);
GuessWord test = new GuessWord(word, letterguessed);
do
{
test.displayWord();
test.checkGuess(0);
test.lettersLeft();
test.toString();
i++;
System.out.println("Guess another letter");
}while( word != "programing");
System.out.print("GAME OVER, thanks for using!");

}
}

My defined class (GuessWord) compiles with no error, so i'am no sure wat is wrong PLEASE ANYBODY HELP THIS NOOB OUT, i appreciate anyone who even bothered read my problem
[5653 byte] By [ELHEK] at [2007-11-11 8:46:55]
# 1 Re: Omg please Help!
I can't find where you said what is "wrong". What happens when you execute your program?
nspils at 2007-11-11 22:34:25 >
# 2 Re: Omg please Help!
lol sorry my mistake. The class GuessWord and the GuessWordTest code both compile but i get a null pointer exception problem or somethin along the lines like that, im not sure that in the class GuessWord that i initiated my varibles correctly
ELHEK at 2007-11-11 22:35:19 >
# 3 Re: Omg please Help!
What line of your program is generating the null pointer exception?

Might it be your hiddenWord is defined in your constructor, and then redefined in your methods? bad form ...
nspils at 2007-11-11 22:36:29 >
# 4 Re: Omg please Help!
ok ive adjusted my code, just note that i made copys of the original files and renamed the filenames and classes.

public class lele
{
private String word;
private char letterguessed;
private int numberOfMistakes;
private char wronglyGuessLetters;
private String[] hiddenWord;
private char[] lettersAvalible = new char[26];

public lele(String word, char letterguessed, String[] hiddenWord)

{
this.letterguessed = letterguessed;
this.word = word;
numberOfMistakes = 0;
wronglyGuessLetters = (char)0;
hiddenWord = new String[word.length()];
for( int j = 0; j < lettersAvalible.length; j++ )
{
lettersAvalible[j] = (char)('A' + j);
}
}

public void displayWord()

{
for ( int i = 0; i < hiddenWord.length; i++)
{
if ( letterguessed != word.charAt(i) )
{
hiddenWord[i] = "*";
}
else
{
hiddenWord[i] += letterguessed;
}

}
}

public void checkGuess(int count)


{
for ( int i = 0; i < word.length(); i++)
{

if ( letterguessed != word.charAt(i) )
{
count++;
}

if ( count == word.length() )
{
numberOfMistakes++;
wronglyGuessLetters += (char)letterguessed;
}

}
if( numberOfMistakes == 9 )
{
System.out.println("\nGAME OVER");
}

}

public void lettersLeft()

{
for ( int i = 0; i < lettersAvalible.length; i++ )
{
if ( letterguessed == lettersAvalible[i] )
{
lettersAvalible[i] = (char)' ';
}

}
}

public String toString()

{
return( hiddenWord + "\nNumber of mistakes = " + numberOfMistakes + "\nWrongly guessed letters = "
+ wronglyGuessLetters + "\nLetters available = " + lettersAvalible);
}
}

And the other...

import java.util.*;
public class lala
{
public static void main(String[] args)
{
System.out.println("Please insert a word to be guessed");
Scanner keyboard = new Scanner(System.in);
String word = keyboard.nextLine();
System.out.println("please guess a letter");
char letterguessed = keyboard.next().charAt(0);
int e = word.length();
int counter = 0;
String[] hiddenWord = new String[e];
for(int z = 0; z < hiddenWord.length; z++)
{
hiddenWord[z] = "*";
}
lele test = new lele(word, letterguessed, hiddenWord);
do
{
test.displayWord();
test.checkGuess(0);
test.lettersLeft();
test.toString();
letterguessed = keyboard.next().charAt(0);
System.out.println("Guess another letter");
counter++;
}while( hiddenWord[counter] != word);
System.out.print("GAME OVER, thanks for using!");

}
}

Im still having some NullPointerException errors with hiddenWord and within the second code im having trouble with the condition in my while loop comparing an char array with a String word, and ideas how to go about this? thx again
ELHEK at 2007-11-11 22:37:28 >
# 5 Re: Omg please Help!
You are passing the array hiddenWord to your lele class. then you are redimensioning it, wipeing it out. Leave that step out in your constructor.

This is a difficulty in your design. A beauty and goal of OOP is to encapsulate function and pass as little information as possible between classes. Here, all of your wordChecking functionaility should be included in your lele class. Your main method interface with the user should just pass limited messages to your class - the "hidden word" and each letter choice - and should receive only one message - the "state" of the guessing - false for notguessed, true for guessed. So, construct your lele class with only the hidden word as its argument. Then have a guessLetter( char g ) method which returns a boolean - true if the hidden word has been guessed, false if not. Your main method would have a while loop which monitors two states - your counter and whether the word has been guessed. When either becomes true, the game is over. Congratulate the winner, console the loser.
nspils at 2007-11-11 22:38:32 >