raed
raed

Reputation: 61

Java hangman help, my code included

**Hello, I have to create a hangman game in java. I cant use arrays. Most of my code is done but I have been having some problems and some tips would be welcome.


I just found something else that I could use help on. After prompting the user for a new secret word and using newHangMan.setSecretWord(newWord); my disguised word does not reset to "????" (with the same number of "?" as words in the secret word).


I'm very sorry for such a long post and the bad formatting(1st time posting here). Can anyone help?**

This is my class file:

 public class HangMan 
{

private String secretWord = "bigbang",  disguisedWord = "";
private int guessCount = 0, missCount = 0;



public void setSecretWord(String newWord)
{
    secretWord = newWord;
    guessCount = 0;
    missCount = 0;

    int wordLength = newWord.length();
    while(wordLength > 0)
    {
        disguisedWord = disguisedWord + "?";
        wordLength--;
    }

}

public String getSecretWord()
{
    return secretWord;
}




 public boolean isFound()
 {  
    return secretWord.equalsIgnoreCase(disguisedWord);

 }


 public String getDisguisedWord()
 {
     return disguisedWord;
 }

 public int getGuessCount()
 {
     return guessCount;
 }

 public int getMissesCount()
 {
     return missCount;
 }

 public void guessCharacter(char c)
 {
    // int position = secretWord.indexOf(c);
     boolean got_it = false;
     String updateDisguised="";

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

         if(c == secretWord.charAt(i))
         {

             updateDisguised = updateDisguised + secretWord.charAt(i);

             String checkDuplicate = updateDisguised.substring(0,i);
             int duplicatePos = checkDuplicate.indexOf(c);
             if(duplicatePos <0)
                 guessCount++;
             got_it = true;


         }
         else 
         {
             updateDisguised = updateDisguised + disguisedWord.charAt(i);
         }

     }
     if(got_it == false)
     {
         missCount++;
         guessCount++;
     }


     disguisedWord = updateDisguised; 

 }










 }

This is my main method:

import java.util.Scanner;



 public class HangManGame {

public static void main(String[] args) 
{


    boolean retry= true;
    String retry_ans;

    Scanner kb = new Scanner(System.in);


    HangMan newHangMan = new HangMan();

    String word = newHangMan.getSecretWord();
    String input;
    char guess;
     newHangMan.setSecretWord(word);

    System.out.println("Hangman game starts:");

do{


    System.out.println("Guess this: " + newHangMan.getDisguisedWord());
    System.out.println("Enter your guess character: [guess]");
    input = kb.next();
    guess = input.charAt(0);

    newHangMan.guessCharacter(guess);

    System.out.println(newHangMan.getDisguisedWord());

    System.out.println("Number of guesses so far : " + newHangMan.getGuessCount());
    System.out.println("NUmber of misses so far: " + newHangMan.getMissesCount());




    if((newHangMan.getMissesCount()==7) || (newHangMan.isFound()))
    {
        System.out.println("The game is over");

        System.out.println("Would you like to try again?");
        retry_ans = kb.next();
        if(retry_ans.equalsIgnoreCase("yes"))
        {
            retry = true;
            System.out.println("Please enter a new secret word:");
            String newWord = kb.next();
            newHangMan.setSecretWord(newWord);
        }
        else
        {
            retry =false;
        }

    }






    }   while(retry == true);




}

}

Upvotes: 4

Views: 2235

Answers (4)

刘伟科
刘伟科

Reputation: 432

(newHangMan.isFound()=true)

should be

newHangMan.isFound()

Do not make an bool compare to another bool. The = is evaluate the boolean.

Upvotes: 4

Kayser
Kayser

Reputation: 6704

Classic java starter error. while check stetement should be

While(retry == true)

Upvotes: 0

Anthony Grist
Anthony Grist

Reputation: 38345

Your while condition is an assignment, rather than a comparison, which is likely the cause of your problem - you're setting the value of retry to true (retry = true) rather than checking that the value of retry currently equals true (retry == true).

Upvotes: 1

Saul
Saul

Reputation: 18071

Replace

while(retry = true);

with

while(retry);

The former is an assignment, so it never evaluates to false although it should.

Upvotes: 2

Related Questions