Java hangman如何累积添加字母

时间:2012-11-07 21:48:03

标签: java netbeans replace stringbuilder

我正在编写一个Java刽子手游戏,到目前为止,我已经获得了一次替换一个代码的代码。我需要的是每次更换,直到猜到这个词。以下是一次一个的工作方式:

        for(int i = 0; i < GuessWord.length(); i++) {
        foundword = words[randvalue].replaceAll("[^" + xletters + "]", "_ ");
        }
            GuessedLetters = xletters.toString().toUpperCase();
            WordLabel.setText(foundword.toUpperCase());
            GuessedLabel.setText(GuessedLetters);
            GuessText.setText(null);
            GuessText.requestFocusInWindow();

这是我的另一次尝试没有那么顺利:

       //replace underscores with letters as they are guessed while the word is not solved
        do {
        foundword = words[randvalue].replaceAll("[^" + xletters + "]", "_ ");
        }
        while (!SetMain.equals(GuessWord));
            //set results to labels
            WordLabel.setText(foundword.toUpperCase());
            GuessedLabel.setText(GuessedLetters);
            GuessText.setText(null);
            GuessText.requestFocusInWindow();

以下是我需要它的完整代码:

    import java.util.Random;
    import java.util.Scanner;
    import javax.swing.JOptionPane;

    public class MainFrame extends javax.swing.JFrame {

        public MainFrame() {
            initComponents();
        }
    static String SecretWord = "";
    double Result = 0;
    StringBuilder mainword = new StringBuilder();
     String[] words = {"technology", "computer", "camera", "graphic design", "digital", "media", "technician", "photography", "troubleshoot", "pixels", "application", "download"};
     Random r = new Random();
    int randvalue = r.nextInt(11);
    String GuessWord = words[randvalue];
    int errors = 0;

        private void GoButtonActionPerformed(java.awt.event.ActionEvent evt) {                                          

        for(int i = 0; i < GuessWord.length(); i++) { 
           mainword.append("_ ");
        }
           mainword.append(SecretWord);
           String SetMain = mainword.toString();
           WordLabel.setText(SetMain);
           GuessButton.setEnabled(true);
           GoButton.setEnabled(false); 
        }                                        

        private void GuessButtonActionPerformed(java.awt.event.ActionEvent evt){                                            
        String strGuess = GuessText.getText(); //user input
        StringBuilder xletters = new StringBuilder(strGuess); // letters guessed
        String GuessedLetters = null;
        String foundword = null;

        //replace underscores with letters as they are guessed
        for(int i = 0; i < GuessWord.length(); i++) {
        foundword = words[randvalue].replaceAll("[^" + xletters + "]", "_ ");

        }
            //set to labels to display results
            GuessedLetters = xletters.toString().toUpperCase();
            WordLabel.setText(foundword.toUpperCase());
            GuessedLabel.setText(GuessedLetters);
            GuessText.setText(null);
            GuessText.requestFocusInWindow();

所以我希望代码能够累积地替换字母,即如果单词是hello:

秘密词:_ _ _ _ _    猜到了......

秘密词:_ e _ _ _    猜到了......

秘密词:_ e _ _ o    猜到了......

秘密词:_ e _ _ o    猜猜了......

Seret Word:h _ _ o    猜猜了......

秘密词:h l l l o 恭喜!

我需要在Netbeans IDE 7.2中使用它,它必须适用于JLayeredPane,而不是System.out.print方法。谢谢!

1 个答案:

答案 0 :(得分:0)

我不确定这是否属于你所追求的,但它可能会给你一些想法...

public class TestHangMan {

    public static void main(String[] args) {
        new TestHangMan();
    }

    public TestHangMan() {
        String word = "Testing";
        String mask = "_______";

        mask = checkGuess(word, mask, 'a');
        System.out.println(mask);
        mask = checkGuess(word, mask, 't');
        System.out.println(mask);
        mask = checkGuess(word, mask, 'e');
        System.out.println(mask);
        mask = checkGuess(word, mask, 's');
        System.out.println(mask);
        mask = checkGuess(word, mask, 'g');
        System.out.println(mask);
        mask = checkGuess(word, mask, 'n');
        System.out.println(mask);
        mask = checkGuess(word, mask, 'i');
        System.out.println(mask);
    }

    protected String checkGuess(String word, String mask, char guess) {
        guess = Character.toLowerCase(guess);
        StringBuilder sb = new StringBuilder(mask);
        for(int index = 0; index < word.length(); index++) {
            if (Character.toLowerCase(word.charAt(index)) == guess) {
                sb.setCharAt(index, word.charAt(index));
            }
        }
        return sb.toString();
    }

}

哪个产生......

_______
T__t___
Te_t___
Test___
Test__g
Test_ng
Testing

您可以使用mask.toLowerCase().contains(stringGuess.toLowerCase())

检查面具以查看用户是否已做出猜测

希望它有所帮助。