2016-04-26 60 views
1

我想用Java做一个Hang子手游戏,但是我在互联网上发现的大部分都是用while循环,但是因为这是chatbot的一部分,所以我需要它与if语句,但它不起作用。它正确地抓住第一个单词,发送6个短划线,但是每个猜测都是“错误的”,并且生活会消失。有谁知道我做错了什么?提前致谢!爪哇试图制作Hang子手

private static String hangmanStarted = "0"; 
private static String hangmanInitialized = "0"; 
private static String hangmanSecret = ""; 
private static int hangmanLives = 10; 

private void cmdHangman() { 
    if (hangmanStarted.equals("0")) { 
     try { 
      secretWord(); 
     } catch (FileNotFoundException e1) { 
      e1.printStackTrace(); 
     } 
     hangmanStarted = "1"; 
     sendMessage("Hangman has started!\nType: ''.guess letter''\nto guess a letter!"); 
    } 
} 

private void cmdGuess() { 
    if (hangmanStarted.equals("1")) { 
     String input = lastMsg.replace("[^a-zA-Z]", ""); 
     input = input.replace("guess", ""); 
     input = input.toLowerCase(); 
     try { 
      Hangman(input); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 
} 

public static void Hangman(String input) throws IOException { 
     StringBuilder guessedLetters = new StringBuilder(); 
     String dashes = secretDashes(); 
     if (guessedLetters.toString().contains(input)) { 
      sendMessage("This word is already guessed"); 
     } else { 
      if (hangmanSecret.contains(input)) { 
       guessedLetters.append(input); 
       if (hangmanSecret.equals(letterConversion(hangmanSecret, secretDashes(), input))) { 
        sendMessage("You win!"); 
        hangmanInitialized = "0"; 
        hangmanStarted = "0"; 
        guessedLetters.delete(0, guessedLetters.length()); 
       } else { 
        guessedLetters.append(input); 
        sendMessage("Letter was found!\nWord: " + letterConversion(hangmanSecret, secretDashes(), input)); 
       } 
      } else { 
       guessedLetters.append(input); 
       hangmanLives = hangmanLives - 1; 
       sendMessage("Word: " + dashes + "\nLives: " + hangmanLives); 
       if (hangmanLives == 0) { 
        sendMessage("GAME OVER: You are dead."); 
        hangmanInitialized = "0"; 
        hangmanStarted = "0"; 
        hangmanLives = 10; 
        guessedLetters.delete(0, guessedLetters.length()); 
       } 
      } 
     } 
    } 

    public static void secretWord() throws FileNotFoundException { 
     if (hangmanInitialized.equals("0")) { 
      hangmanInitialized = "1"; 
      Scanner infile = new Scanner(new FileReader("hangWords.txt")); 
      hangmanSecret = infile.next(); 
      infile.close(); 
     } 
    } 

    public static String secretDashes() throws FileNotFoundException { 
     StringBuilder dashes = new StringBuilder(); 
     for (int count = 0; count < hangmanSecret.length(); count++) { 
      dashes.append('-'); 
     } 
     return dashes.toString(); 
    } 

    public static String letterConversion(String secret, String dashes, String letter) { 
     StringBuilder conversion = new StringBuilder(); 
     for (int index = 0; index < secret.length(); index++) { 
      char secretChar = secret.charAt(index); 
      secret = String.valueOf(secretChar); 
      char letterChar = letter.charAt(index); 
      if (secret.equals(letter)) 
       conversion.setCharAt(index, letterChar); 
      dashes = conversion.toString(); 
     } 
     return dashes; 
    } 

它应该做的:

我开始刽子手用命令。 我猜通过猜测命令的字母。 猜测命令的输入被转发给Hangman void。 Hang子手检查是否已经猜到了这封信。如果没有,请检查该字母是否在秘密字词中,并向用户显示猜出的字母。如果它不在秘密词中,请移除生命。如果生命是0,结束游戏。

PS。是的,我知道,我使用的是字符串而不是布尔值,但它是一样的,我暂时用它来测试这是否是问题,嘿。

编辑:这不是同一个问题。改变了这一行代码后,问题仍然存在。

+0

那么,为什么我会下降?我只展示了必要的代码,解释了问题并解释了它应该做的事情。我没有加上感谢或问候。我遵循所有规则。我认为这不值得投票。 –

+0

在你的letterConversion()方法改变了秘密和字母的比较 –

+0

@KevinEsche这并没有解决它,仍然是同样的问题! :(感谢您的输入,尽管如此。 –

回答

2

这行代码是不正确:

if (secret == letter) 

它应该是:

if(secret.equals(letter)) 

,因为你正在使用的字符串。

+0

谢谢你的回答!但改变之后,问题仍然是一样的。 –

+0

至少删除你的downvote,因为它不是重复的。 –

+0

@DysanixOfficial我没有downvote你 – Pooya