Find the Hurkle

Problem Description

You will be developing a simple guessing game called Find the Hurkle.  The Hurkle is an imaginary creature that hides somewhere in a two-dimensional 9x9 integer game-space.  Each time the game is run the program places the Hurkle at a random position in the game-space (a row and column pair) and the player has a maximum of five (5) guesses to guess the Hurkle s location.  The Hurkle does not move during the game.  If the player finds the Hurkle, the program reports the success and ends.  If the player does not find the Hurkle the program gives a hint about what direction to the player move to find the Hurkle.  The hint must be correct and the optimal direction --  the program doesn't lie or mislead the player!  There are eight possible hints: north, northeast, east, southeast, south, southwest, west, and northwest.  The program must detect guesses that are not in the game-space and re-prompt until a valid value is given (invalid guesses don't count as one of the five).

When the program starts, and after each turn, a map of the game-space is displayed, showing rows and columns.

    1   2   3   4   5   6   7   8   9
A   .   .   .   .   .   .   .   .   .
B   .   .   .   .   .   .   .   .   .
C   .   .   .   .   .   .   .   .   .
D   .   .   .   .   .   .   .   .   .
E   .   .   .   .   .   .   .   .   .
F   .   .   .   .   .   .   .   .   .
G   .   .   .   .   .   .   .   .   .
H   .   .   .   .   .   .   .   .   .
I   .   .   .   .   .   .   .   .   .

   Turns: 0  
?

After each turn the map is displayed with an X marking the location of the move.   If the player uses all their turns, they lose and the Hurkle's location is revealed.  If they guess the location of the Hurkle they win, and the Hurkle is shown as an H in the map.   

To facilitate testing, if the game is started with a command line flag of -t, the hurkle is hidden at spot E5.

         java Hurkle -t


At each turn the player can enter a move, which is a letter and a number (with no blanks), such as F8.  Or they can enter 'n' for a new game, or 'q' to quit.

Here is a sample execution output.

Design

Build a class to represent the board that uses a two-dimensional array to save the user's moves.  The Board class is responsible for generating a random board, remembering the user's moves, reporting if the hurkle was found, and determining the hint.   The Board class must not do any input/output from the user.

All interactions with the user must be in a separate class from the board.  Obtaining the user's moves, printing the board, and keeping track of turns are done in this "driver" class.