0

私の絞首刑執行人のゲームでは、複数の文字が入力されている、同じ文字を2回推測しているなどのことを確認するために、一連のエラーメッセージが必要です。これまでの私の完全なコードは次のとおりです。

    import java.awt.Color;
    import java.awt.Font;
    import java.util.Random;
    import javax.swing.JOptionPane;
    import javax.swing.UIManager;
    import javax.swing.plaf.FontUIResource;

    public class MainFrame extends javax.swing.JFrame {

        public MainFrame() {
            initComponents();
        }
        //declare variables
        static String secretWord = "";
        double result = 0;
        StringBuilder mainWord = new StringBuilder();
        StringBuilder xletters = new StringBuilder(); // letters guessed
        String[] words = {"technology", "computer", "camera", "graphic", "digital", "media", "technician",
            "photography", "troubleshoot", "pixels", "application", "download"};
        Random r = new Random();
        int randValue = r.nextInt(12);
        String guessWord = words[randValue];
        int errors = 0;
        public static int wins = 0, losses = 0;
        String foundWord = null;
        private void GuessButtonActionPerformed(java.awt.event.ActionEvent evt)         {                                            
            String strGuess = GuessText.getText(); //user input           
            String letter = strGuess;
            xletters.append(strGuess.toUpperCase());
            String GuessedLetters = xletters.toString();

            try {
    //replace underscores with letters as they are guessed
                do {
                    for (int i = 0; i < 1; i++) {
                        secretWord = secretWord + letter.charAt(0);
                        foundWord = words[randValue].replaceAll("[^" + secretWord + "]", "_ ");
                        //if user entered more than one letter
                        if (strGuess.length() > 1) {
                            JOptionPane.showMessageDialog(null, "Only one letter at a time!");
                            xletters.append("");
                            GuessedLetters = null;
                            GuessText.setText(null);
                            GuessText.requestFocusInWindow();
                        } //if letter isn't in word
                        else if (guessWord.indexOf(strGuess) == -1) {
                            JOptionPane.showMessageDialog(null, "Sorry, that wasn't in the word.");
                            errors++;
                            if (errors == 1) {
                                Hangman0.setVisible(false);
                            }
                            if (errors == 2) {
                                Hangman1.setVisible(false);
                            }
                            if (errors == 3) {
                                Hangman2.setVisible(false);
                            }
                            if (errors == 4) {
                                Hangman3.setVisible(false);
                            }
                            if (errors == 5) {
                                Hangman4.setVisible(false);
                            }
                            if (errors == 6) {
                                Hangman5.setVisible(false);
                            }
                            if (errors == 7) {
                                Hangman6.setVisible(false);
                            }
                            if (errors == 8) {
                                Hangman7.setVisible(false);
                            }
                            if (errors == 9) {
                                Hangman8.setVisible(false);
                            }
                            if (errors == 10) {
                                Hangman9.setVisible(false);
                                JOptionPane.showMessageDialog(null, "You lost! The word was: " + guessWord);
                                losses++;
                                DirectionsFrame DFrame = new DirectionsFrame();
                                DFrame.setVisible(true);
                                setVisible(false);
                                MainFrame MFrame = new MainFrame();
                                MFrame.dispose();
                                xletters.delete(0, 100);
                                secretWord = "";
                                foundWord = null;
                                strGuess = null;
                                String strLosses = Integer.toString(losses);
                                String strWin = Integer.toString(wins);
                                DirectionsFrame.WinsLabel.setText(strWin);
                                DirectionsFrame.LossesLabel.setText(strLosses);
                            }
                }
            }
                    WordLabel.setText(foundWord.toUpperCase());
                    GuessedLabel.setText(GuessedLetters);
                    GuessText.setText(null);
                    GuessText.requestFocusInWindow();
                } while (foundWord == null);
                if (foundWord.equalsIgnoreCase(guessWord)) {
                    JOptionPane.showMessageDialog(null, "Yay!");
                    wins++;
                    DirectionsFrame DFrame = new DirectionsFrame();
                    DFrame.setVisible(true);
                    setVisible(false);
                    MainFrame MFrame = new MainFrame();
                    MFrame.dispose();
                    xletters.delete(0, 100);
                    secretWord = "";
                    foundWord = null;
                    String strWin = Integer.toString(wins);
                    String strLosses = Integer.toString(losses);
                    DirectionsFrame.WinsLabel.setText(strWin);
                    DirectionsFrame.LossesLabel.setText(strLosses);
                }
            } catch (StringIndexOutOfBoundsException e) {
                JOptionPane.showMessageDialog(null, "Please enter a letter.");
                GuessedLabel.setText(GuessedLetters);
                GuessText.setText(null);
                GuessText.requestFocusInWindow();
            }
        }                                           


        private void GetButtonActionPerformed(java.awt.event.ActionEvent evt) {
            //print out underscores to begin game
            for (int i = 0; i < guessWord.length(); i++) {
                mainWord.append("_ ");
            }
            String SetMain = mainWord.toString();
            mainWord.append(secretWord);
            WordLabel.setText(SetMain);
            GuessButton.setEnabled(true);
            GetButton.setEnabled(false);
        }

私が最も困っているのは、ユーザーが同じ文字を2回入力したかどうかを確認することです。したがって、アルファベットの1文字を1回だけ推測できます。また、ユーザーが複数の文字を入力したかどうかをチェックするコードにはバグがあると思います。推測された文字ボックスにそれらの文字を追加したくない場合は、とにかく追加するからです。(つまり、ユーザーは「hf」を推測し、推測された文字では「hf」になりますが、これは何もないはずです)

答えはメソッドindexOf()にあると思いますが、if条件が何を言うのか完全にはわかりません...

NetbeansIDE7.2を使用してコードをコンパイルしています。助けてください!ありがとう。

4

3 に答える 3

1

何かがすでに使用されているかどうかを知りたい状況では、Setが手に入ります。たとえば、絞首刑執行人のゲームで使用される文字には、Set<String>コレクションがあります。

Set<String> lettersUsed = new HashSet<String>();

何かがすでに選択されているかどうかを知りたい場合:

String inputLetter = "Z";  // test for the letter Z

if (!lettersUsed.contains(inputLetter)) {
    lettersUsed.add(inputLetter);

    // process letter in word
} else {
    // letter has already been used!
}

特定の文字セットのみを許可する場合は、最初に設定済み:

if (lettersAllowed.contains(inputLetter)) {
   lettersAllowed.remove(inputLetter);

   // process letter in word
} else {
   // letter is not allowed (anymore)
}
于 2012-11-10T22:07:17.473 に答える
0

彼らがすでに何かを推測したかどうかを確認するために、最初は空の文字列推測を行うことができ、推測したときに、その文字を文字列に追加できます。

String guesses = "";
...
guesses+= letter;

すでに同様のことをしているように見えますが、新しい文字列を作成するのではなく、必ず文字を追加してください。そうすれば、推測文字列に新しく推測された文字(if(guesses.contains(letter)))がすでに含まれているかどうかを毎回確認できます。

また、反復が1回だけのforループがある理由はわかりませんが、複数文字の場合は、ループから抜け出すか、feの場合は続行してみてください。

于 2012-11-10T21:50:39.083 に答える
0

私があなたの手紙をチェックするために私がすることは次のとおりです:使用された手紙でリストを作りなさい。プレイヤーが手紙を試すたびに、その手紙がリストにあるかどうかをforループで確認します。そうでない場合は、リストに追加します。これは例です:

List<String> usedletters = new List<String>(26);

boolean checkLetterUsed(String input){
    boolean tempvariable = false;
    for(String letter: usedletters){
        if(letter==input){
            tempvariable = true;
        }
    }
    if(tempvariable){
        return true;
    }else{
        usedletters.add(input);
        return false;
    }
}
于 2012-11-10T21:53:33.057 に答える