rendered paste bodyimport java.io.*;
public class Hangman // super class. The program uses inheritance to link the 3 classes together
{
private StringBuffer wordToPlayWith;
// word selected - for computer's use
private StringBuffer wordToGuess;
// same as the above, but works on wordToPlayWith - shown to the user
public char [] wordForComp;
public char [] wordForDisp;
String charChosen;
String playerName;
int score;
int highScore;
boolean use = false;
public char [] used;
private int numberOfTries; // number of chances user has.
private boolean hasGuessed = false; // tests if user has correctly guessed the word.
int tries = 0;
char [] letterHasBeenUsed; // tests whether chosen char has been used or not.
boolean alreadyGuessedChar = true; // boolean to switch if user has used char already.
public Hangman (String wordToPlayWith) throws IOException
/* implements almost all of the necessary testing variables. Uses wordToPlayWith (which is the random
word used to play with) and extends it to also be used by wordToGuess - for user - and wordToPlayWithCharArray.
guessedWordFullArray.
*/
{
this.wordToPlayWith = new StringBuffer (wordToPlayWith);
wordToGuess = new StringBuffer (128);
used = new char [wordToPlayWith.length () + 8];
wordForComp = new char [wordToPlayWith.length ()];
wordForDisp = new char [wordToPlayWith.length ()];
for (int i = 0 ; i < wordToPlayWith.length () ; i++)
{
wordForComp [i] = wordToPlayWith.charAt (i);
if (
wordToPlayWith.charAt (i) == ' ' | wordToPlayWith.charAt (i) == '!' | wordToPlayWith.charAt (i) == '*' |
wordToPlayWith.charAt (i) == '#' | wordToPlayWith.charAt (i) == '$' | wordToPlayWith.charAt (i) == '@' |
wordToPlayWith.charAt (i) == '%' | wordToPlayWith.charAt (i) == '^' | wordToPlayWith.charAt (i) == '/' |
wordToPlayWith.charAt (i) == '&' | wordToPlayWith.charAt (i) == '&' | wordToPlayWith.charAt (i) == '*' |
wordToPlayWith.charAt (i) == '(' | wordToPlayWith.charAt (i) == ')' | wordToPlayWith.charAt (i) == '-' |
wordToPlayWith.charAt (i) == '_' | wordToPlayWith.charAt (i) == '=' | wordToPlayWith.charAt (i) == '`' |
wordToPlayWith.charAt (i) == '~' | wordToPlayWith.charAt (i) == '<' | wordToPlayWith.charAt (i) == '>' |
wordToPlayWith.charAt (i) == '|' | wordToPlayWith.charAt (i) == '[' | wordToPlayWith.charAt (i) == ']' |
wordToPlayWith.charAt (i) == '.' | wordToPlayWith.charAt (i) == ',' | wordToPlayWith.charAt (i) == '+' |
wordToPlayWith.charAt (i) == '"' | wordToPlayWith.charAt (i) == '?'
)
{
wordForDisp [i] = wordToPlayWith.charAt (i);
}
else if (wordToPlayWith.charAt (i) == ' ')
{
wordForDisp [i] = ' ';
}
else
{
wordForDisp [i] = '-';
}
}
}
public void play () throws IOException
{
int wordToPlayWithLength = wordToPlayWith.length ();
/* tests to determine the number of tries
the user should get to guess. Tries = word.length +5. */
// System.out.println ("The word to guess has " + wordToPlayWithLength + " characters.");
//can be erased if the user pleases.
BufferedReader input = new BufferedReader (new InputStreamReader (System.in));
for (int y = 0 ; y < used.length ; y++)
{
System.out.print ("The word is: ");
for (int t = 0 ; t < wordForComp.length ; t++)
{
System.out.print (wordForComp [t]);
}
System.out.println ("\n");
System.out.print ("The word to guess is: " + wordToGuess.toString ());
for (int t = 0 ; t < wordForDisp.length ; t++)
{
System.out.print (wordForDisp [t]);
}
System.out.println ("\n");
System.out.print ("The characters you have used are: ");
for (int t = 0 ; t < used.length ; t++)
{
if (used [t] == ' ')
{
break;
}
else
{
System.out.print (used [t]);
System.out.print (" ");
tries++;
}
}
// if (tries == used.length)
// {
// System.out.println ("Game Over!");
// }
System.out.println ("\n");
System.out.println ("Please enter a single character: ");
charChosen = input.readLine (); // user chooses the character.
while ((charChosen.length () > 1) || (charChosen.length () == 0))
{
System.out.println ("Enter only one character!");
charChosen = input.readLine ();
}
use = testInput2 (charChosen.charAt (0));
while (use == true)
{
while ((charChosen.length () > 1) || (charChosen.length () == 0))
{
System.out.println ("Enter only one character!");
//charChosen = input.readLine ();
}
System.out.println ("You have already used " + charChosen);
charChosen = input.readLine ();
use = testInput2 (charChosen.charAt (0));
}
if (use == false)
{
for (int t = 0 ; t < wordForComp.length ; t++)
{
if (wordForComp [t] == charChosen.charAt (0))
{
wordForDisp [t] = charChosen.charAt (0);
}
}
used [y] = charChosen.charAt (0);
tries++;
}
// System.out.println (wordForComp.length + ", " + wordForDisp.length );
// if (tries == used.length)
// {
// System.out.println ("Game over!");
// break;
// }
String wordForDispS = "";
String wordForCompS = "";
for (int t = 0 ; t < wordForComp.length ; t++)
{
wordForDispS = wordForDispS + wordForDisp [t];
wordForCompS = wordForCompS + wordForComp [t];
}
if (wordForDispS.equals (wordForCompS))
{
System.out.println ("Well done!");
score++;
break;
}
}
BufferedReader highScoreInput = new BufferedReader (new FileReader ("HangmanHighScore.txt"));
highScore = Integer.parseInt (highScoreInput.readLine ());
if (score > highScore)
{
PrintWriter writer = new PrintWriter (new FileWriter ("HangmanHighScore.txt"));
writer.write(score);
writer.close ();
}
}
public boolean testInput2 (char u)
{
for (int i = 0 ; i < used.length ; i++) //
{
if (charChosen.charAt (0) == used [i])
{
//System.out.println ("You have used this char");
return true;
// break;
}
if (i == used.length - 1)
{
return false;
}
}
return false;
}
}