Write a JavaFX GUI program to play a game of Hangman. (If you're not familiar with the game, check out the Wikipedia page here (Links to an external site.).) Your program reads in a dictionary file and randomly chooses a word. The user guesses letters until they either guess the word or run out of guesses.

There are two parts to this project. The first is writing the game and getting it working properly. The second is adding exception handling. I strongly recommend you complete Part I before moving on to Part II.

Part I: The Game

I've provided a GUI shell for the game. The shell sets up all of the GUI components. You will complete two methods: the chooseWord method and the handleGuessField method.

Your game must follow these rules:

  • The user gets a pre-defined maximum number of wrong guesses. (My example program uses 7.)
  • The game should ignore the capitalization (upper or lower case) of guesses.
  • If a user guesses the same wrong letter twice, this letter should only count once towards the maximum wrong guesses.
  • Correct guesses do not count towards the maximum wrong guesses.
  • If the user guesses a correct letter, all instance of that letter should be revealed.

The provided file uses several text components that you will update throughout the program:

  • currentWordText: displays the word using "-" for characters not yet guessed
  • outcomeText: displays the outcome of each guess or the game (e.g., right guess, wrong guess, game won, game lost)
  • wrongGuessesText: lists the wrong guesses the user has made
  • wrongGuessNumberText: displays how many wrong guesses the user has made

chooseWord method

This method randomly chooses a word. The method should read in words from a file (such as words.txt, provided) and randomly choose a word.

The method should also provide code to account for a missing file. In this case, the outcomeText should display an error message (such as "Error: No dictionary."). The guessField should then be disabled because the game cannot be played. The program should not crash or throw other exceptions.

Hint for testing: Print out the randomly selected word you are trying to guess. This makes for much easier testing!

handleGuessField method

This method responds to the user guess (typed into the guessField). This is basically the method that makes the game run!

In this method, you should read in the user's guess and check if it is valid. If it's not valid, update the displays.

If the guess is valid, you should check if the user has guessed the letter already. If they have, update the displays.

If it's a new guess, check if it is right or wrong and update the displays. Then also check if the game is over (either the user guessed the word and won or reached the maximum wrong guesses and lost).

For full credit:

  • add additional helper methods.
    • Do not have the entire game logic in the handleGuessField method.
    • Some examples of helpful methods might be isGuessValid, updateDisplays, getDisplayVersionOfSWord, etc.
  • create whatever instance data variables you need to keep track of things.
    • Some examples might be a list that keeps track of guessed characters, an array that keeps track of whether each character in the word has been guessed, the number of wrong guesses, etc.
  • reduce duplicated code

You can add code to the start() method to initialize variables and/or invoke helper methods.

I strongly recommend getting the game working before moving on to Part II.

Part II: Exception Handling

Add exception handling to cover three erroneous occurrences.

  • Note: I realize you could write a working game that accounts for these situations without using exception handling. But, for this project, you are required to use exception handling.

For all three situations, create your own exception type(s) to represent the situation.

  • When the situation occurs, throw an object of the type you just created.
  • The program should catch the exception(s) and update the displays.

The user continues to guess after invalid guesses.

Invalid guesses does not count against the user's wrong guess count.

Erroneous situations:

  • The user enters an empty guess
  • The user enters a guess that is longer than one character (like aa or zb)
  • The user enters a guess that is not a letter (like + or $)
    • Hint: check out the Character class for help with detecting this situation!

Your program method should not terminate or crash because of any of these thrown exceptions. All thrown exceptions should be caught and handled and the game should continue.

Extra Credit

Allow the user to play multiple games. Add a "play again" button that is only visible when the game is over. Choose a new random word for each game.

Academic Honesty!
It is not our intention to break the school's academic policy. Posted solutions are meant to be used as a reference and should not be submitted as is. We are not held liable for any misuse of the solutions. Please see the frequently asked questions page for further questions and inquiries.
Kindly complete the form. Please provide a valid email address and we will get back to you within 24 hours. Payment is through PayPal, Buy me a Coffee or Cryptocurrency. We are a nonprofit organization however we need funds to keep this organization operating and to be able to complete our research and development projects.