2

我正在创建一个刽子手游戏。一切正常,我已经准备好用于让游戏失败并给出-1 猜测的代码。虽然当将它添加到 else 语句时,它会重复等于单词的长度,并且它也会给出一个猜测——即使它是对的?我看不出代码有什么问题?我相信这是我猜错的代码,虽然我看不到其他方法但没有正确放置?

这是代码:

private class check implements ActionListener {
   public void actionPerformed(ActionEvent ae) {
      try {
         // Grabs the letter from the guessField and converts it into a char
         // which can be used to compare against the word.
         guess = guessField.getText();
         guessField.setText("");
         char guess2 = guess.charAt(0);

         // --------------------
         // Here is the guessing logic but it's currently
         // not working and you can not win since i haven't written code for
         // it yet. it's not selecting all the letters. for Example if
         // choosing A in a word such as Banana it only selects the first
         // a--------------------------- //
         String displaySecret = wordField.getText();
         if (displaySecret.equals("")) {/* case for fist execution */
            displaySecret = "";
            for (int i = 0; i < random.length(); i++)
               displaySecret += "_ ";
         }
         String newDisplaySecret = "";
         for (int v = 0; v < random.length(); v++) {
            if (guess2 == random.charAt(v)) {
               newDisplaySecret += random.charAt(v); // newly guessed
                                                     // character
            } else {
               newDisplaySecret += displaySecret.charAt(v); // old state
               guesses--;
               statusLabel.setText("Guesses left: " + guesses);
               missField.setText(missField.getText() + guess);
               if (guesses <= 0) {
                  JOptionPane.showMessageDialog(null,
                        "Game over! The word was: " + random);
                  guessField.setEditable(false);
                  wordField.setText("");
                  missField.setText("");
                  guesses = 7;
                  statusLabel.setText("Guesses left: " + guesses);
               }
            }
         }
         displaySecret = new String(newDisplaySecret);
         wordField.setText(displaySecret);
         if (displaySecret.equals(random)) {
            JOptionPane.showMessageDialog(null, "You Won! The Word was: "
                 + random);
            guesses = 7;
            statusLabel.setText("Guesses left: " + guesses);
            wordField.setText("");
            missField.setText("");
            guessField.setEditable(false);
         }
      } catch (Exception e) {
         System.out.println(e);
      }
   }
}
4

2 回答 2

3

如果random是您的 Word,则迭代它的每个字符,然后检查每个单个字符是否与您为每个与猜测不匹配的字符 -1 获得的猜测匹配。

例如:Word isBananarama并且您猜测n您的第一个和第二个匹配项将转到 else 子句。然后一次 if 子句再次出现,然后是 else 等等。

你必须

  1. 遍历所有字符,检查它们是否匹配
  2. 如果发生匹配,则替换字符并增加计数器
  3. 检查正确字符的计数器是否等于 0
  4. 如果是这样,减少猜测

其他一些提示:您应该.toLower()在比较之前使用您的输入和单词字符串以允许不区分大小写

一些示例代码:

int charsGuessedCorrectly;
for ( int i = 0; i < random.length( ); i++ )
{
    if ( random.charAt( i ) == guess )
    {
        charsGuessedCorrectly++;
        newDisplaySecret += random.charAt(v); // newly guessed
                                              // character
    }
}

if ( charsGuessedCorrectly == 0 )
{
    newDisplaySecret += displaySecret.charAt(v); // old state
    guesses--;
    statusLabel.setText("Guesses left: " + guesses);
    missField.setText(missField.getText() + guess);
    if (guesses <= 0) {
       JOptionPane.showMessageDialog(null,
           "Game over! The word was: " + random);
       guessField.setEditable(false);
       wordField.setText("");
       missField.setText("");
       guesses = 7;
       statusLabel.setText("Guesses left: " + guesses);
}
于 2013-10-17T21:44:56.750 回答
1

这是您检查单词并生成“newDisplaySecret”所需的内容:

for (int v = 0; v < random.length(); v++) {
      if (guess2 == random.charAt(v)) {
           newDisplaySecret += random.charAt(v); // newly guessed
                                                 // character
        } else {
           newDisplaySecret += displaySecret.charAt(v);
}

以下是您可以确定玩家猜对还是猜错的方法:

if(newDisplaySecret.equals(displaySecret)){
    guesses --;

}

这需要放在您的检查字代码之后。您的代码似乎减少了随机单词中每个字母的猜测。

更新显示:

     displaySecret = new String(newDisplaySecret);
     wordField.setText(displaySecret);

既然您知道这一举动的当前状况,您就可以决定该人是赢还是输,或者只需要继续玩:

if(guesses <= 0){
    /*place here instructions for loosing scenario*/
}else{
     if(displaySecret.equals(random)) {
         /*place here instructions for winning scenario*/
     }
    /*simply do nothing the game is neither lost or won*/
}

希望这可以帮助

于 2013-10-21T13:26:07.367 回答