public class WordGuess extends TwoPlayerGame implements CLUIPlayable{   private String secretWord;    private StringBuffer currentWord;    private int wordLength;    private int unguessedLetters;    public WordGuess()    {   secretWord = getSecretWord();        wordLength = secretWord.length();        currentWord = new StringBuffer(secretWord);        for (int k = 0; k < wordLength; k++)           currentWord.setCharAt(k,'?');        unguessedLetters = wordLength;    } //WordGuess() constructor    private String getSecretWord()    {   int num = (int)(Math.random()*10);        switch (num)        {   case 0: return "SOFTWARE";            case 1: return "SOLUTION";            case 2: return "CONSTANT";            case 3: return "COMPILER";            case 4: return "ABSTRACT";            case 5: return "ABNORMAL";            case 6: return "ARGUMENT";            case 7: return "QUESTION";            case 8: return "UTILIZES";            case 9: return "VARIABLE";            default: return "MISTAKES";        } //switch    } //getSecretWord()    /* Returns true if letter is a new correct letter    in which case the letter is filled into currentWord.    */    private boolean guessLetter(char letter)    {   if (secretWord.indexOf(letter) == -1)            return false; // letter is not in secretWord        else // find positions of letter in secretWord        {   for (int k = 0; k < wordLength; k++)            {   if (secretWord.charAt(k) == letter)                {   if (currentWord.charAt(k) == letter)                        return false; //already guessed                    currentWord.setCharAt(k,letter);                    unguessedLetters--; //one less to find                } //if            } //for            return true;        } //else    } //guessLetter()    /** Overridden method from TwoPlayerGame */    public String getRules()    {   return "\n*** The Rules of Word Guess ***\n" +        "(1) The game generates a secret word.\n" +        "(2) Two players alternate taking moves.\n" +        "(3) A move consists of guessing a letter in the word.\n" +        "(4) A player continues guessing until a letter is wrong.\n" +        "(5) The game is over when all letters of the word are guessed\n" +        "(6) The player guessing the last letter of the word wins.\n";    } //getRules()    /** Implementation of abstract method from TwoPlayerGame */    public boolean gameOver()    {   return (unguessedLetters <= 0);    } // gameOver()    /** Implementation of abstract method from TwoPlayerGame */    public String getWinner()    {   if (gameOver())	          return "Player " + getPlayer();        else return "The game is not over.";    } // getWinner()    /** Implementation of method from CLUIPlayable */    public String reportState()    {   return "\nCurrent word " + currentWord.toString()            + "\nPlayer " + getPlayer() + " guesses next.";    } // report()    /** Implementation of method from CLUIPlayable */    public String prompt()    {    return "\nGuess a letter that you think is in the secret word: ";    } //prompt()    /** Implementation of method from CLUIPlayable */    public String move(String s)    {   if (s.length()==1)        {   char letter = s.toUpperCase().charAt(0);            if (guessLetter(letter)) //if correct            {  return "Yes, the letter " + letter +                   " IS in the secret word\n";            } else            {   changePlayer();                return "Sorry, " + letter + " is NOT a " +                    "new letter in the secret word\n";            } //else        } //if        return "Oops. That is an illegal input.\n";    } //move()    /*** A WordGuess Application Program    */    public static void main(String args[])    {   WordGuess game = new WordGuess();        CLUIGamePlayer gp = new CLUIGamePlayer(game);        gp.play();    } //main()    } //WordGuess class