0

私は Netbeans で基本的なハングマン ゲームを作成しました。ユーザーが 26 個のボタン (アルファベットの各文字に 1 つ) の 1 つをクリックすると、その文字が単語でテストされます。私が抱えている主な問題は、手紙をテストすることです。

    //array holding all buttons        
    JButton[] alphabet = {AButton, BButton, CButton, DButton, EButton, FButton, GButton, HButton, IButton, JButton, KButton, LButton, MButton, NButton, OButton, PButton, QButton, RButton, SButton, TButton, UButton, VButton, WButton, XButton, YButton, ZButton};

    //getting the current letter(need something in place of the 0)
    String currentLetter = (alphabet[0].getLabel());             

    //replace underscores with letters as they are guessed
                for (int i = 0; i < 1; i++) {
                    secretWord = secretWord + currentLetter.charAt(0);
                    foundWord = words[randValue].replaceAll("[^" + secretWord + "]", "_ ");
    }

ボタン配列を使用する必要があるとどこかで読んだので、入れましたが、機能しませんでした。また、プログラムが文字を読み取るには ActionListener が必要であると読みました。私が使用した以前の試みは次のとおりです。

currentLetter = AButton.getText();

currentLetter = AButton.getLabel();

しかし、残念ながら役に立ちませんでした。したがって、私は Netbeans を使用しており、Java の初心者であることを覚えておいてください。ありがとう:)

編集:

        private void AButtonActionPerformed(java.awt.event.ActionEvent evt) {                                        
        DoButton.doClick();
}                                       

        private void DoButtonActionPerformed(java.awt.event.ActionEvent evt) {                                         
            JButton button = (JButton) evt.getSource();
            String currentLetter = button.getText(); 

        //replace underscores with letters as they are guessed
                        for (int i = 0; i < 1; i++) {
                            secretWord = secretWord + currentLetter.charAt(0);
                            foundWord = words[0].replaceAll("[^" + secretWord + "]", "_ ");
               }
    }

完全なコード:

    import java.awt.Color;
    import java.awt.Font;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.util.Random;
    import javax.swing.JButton;
    import javax.swing.JOptionPane;
    import javax.swing.UIManager;
    import javax.swing.plaf.FontUIResource;

    public class MainFrame extends javax.swing.JFrame {

        public MainFrame() {
            initComponents();
        }

        static String secretWord = "";
        StringBuilder mainWord = new StringBuilder();
        String[] words =         {"technology", "computer", "camera", "graphic", "digital", "media", "technician",
            "photography", "troubleshoot", "pixels", "application", "download"};
        Random r = new Random();
        int randValue = r.nextInt(11)+1;
        String guessWord = words[0];//words[randValue];
        int errors = 0;
        public static int wins = 0, losses = 0;
        String foundWord = null;
        String currentLetter;
        private void RestartButtonActionPerformed(java.awt.event.ActionEvent evt)         {                                              
            //restart game
                DirectionsFrame DFrame = new DirectionsFrame();
                DFrame.setVisible(true);
                setVisible(false);
                MainFrame MFrame = new MainFrame();
                MFrame.dispose();
                secretWord = "";
                foundWord = null;
                DirectionsFrame.WinsLabel.setText(null);
                DirectionsFrame.LossesLabel.setText(null);
        }                                             

        private void GetButtonActionPerformed(java.awt.event.ActionEvent evt)         {                                          
            for (int i = 0; i < guessWord.length(); i++) {
                mainWord.append("_ ");
            }
            String SetMain = mainWord.toString();
            mainWord.append(secretWord);
            WordLabel.setText(SetMain);
            GetButton.setEnabled(false);
            AButton.setEnabled(true);BButton.setEnabled(true);CButton.setEnabled        (true);DButton.setEnabled(true);EButton.setEnabled(true);
            FButton.setEnabled(true);GButton.setEnabled(true);HButton.setEnabled        (true);IButton.setEnabled(true);JButton.setEnabled(true);
    KButton.setEnabled(true);LButton.setEnabled(true);MButton.setEnabled(true);NButton.setEnabled(true);OButton.setEnabled(true);
    PButton.setEnabled(true);QButton.setEnabled(true);RButton.setEnabled(true);SButton.setEnabled(true);TButton.setEnabled(true);
    UButton.setEnabled(true);VButton.setEnabled(true);WButton.setEnabled(true);XButton.setEnabled(true);YButton.setEnabled(true);
    ZButton.setEnabled(true);
}                                         

private void ExitButtonActionPerformed(java.awt.event.ActionEvent evt) {                                           
    // Exit the program
    System.exit(0);
}                                          

private void AButtonActionPerformed(java.awt.event.ActionEvent evt) {                                        
    DoButton.doClick();
}                                       

private void BButtonActionPerformed(java.awt.event.ActionEvent evt) {                                        
    DoButton.doClick();
}                                       

private void CButtonActionPerformed(java.awt.event.ActionEvent evt) {                                        
    DoButton.doClick();
}                                       

private void DButtonActionPerformed(java.awt.event.ActionEvent evt) {                                        
    DoButton.doClick();
}                                       

private void EButtonActionPerformed(java.awt.event.ActionEvent evt) {                                        
    DoButton.doClick();
}                                       

private void FButtonActionPerformed(java.awt.event.ActionEvent evt) {                                        
    DoButton.doClick();
}                                       

private void GButtonActionPerformed(java.awt.event.ActionEvent evt) {                                        
    DoButton.doClick();
}                                       

private void HButtonActionPerformed(java.awt.event.ActionEvent evt) {                                        
    DoButton.doClick();
}                                       

private void IButtonActionPerformed(java.awt.event.ActionEvent evt) {                                        
    DoButton.doClick();
}                                       

private void JButtonActionPerformed(java.awt.event.ActionEvent evt) {                                        
    DoButton.doClick();
}                                       

private void KButtonActionPerformed(java.awt.event.ActionEvent evt) {                                        
    DoButton.doClick();
}                                       

private void LButtonActionPerformed(java.awt.event.ActionEvent evt) {                                        
    DoButton.doClick();
}                                       

private void MButtonActionPerformed(java.awt.event.ActionEvent evt) {                                        
    DoButton.doClick();
}                                       

private void NButtonActionPerformed(java.awt.event.ActionEvent evt) {                                        
    DoButton.doClick();
}                                       

private void OButtonActionPerformed(java.awt.event.ActionEvent evt) {                                        
    DoButton.doClick();
}                                       

private void PButtonActionPerformed(java.awt.event.ActionEvent evt) {                                        
    DoButton.doClick();
}                                       

private void QButtonActionPerformed(java.awt.event.ActionEvent evt) {                                        
    DoButton.doClick();
}                                       

private void RButtonActionPerformed(java.awt.event.ActionEvent evt) {                                        
    DoButton.doClick();
}                                       

private void SButtonActionPerformed(java.awt.event.ActionEvent evt) {                                        
    DoButton.doClick();
}                                       

private void TButtonActionPerformed(java.awt.event.ActionEvent evt) {                                        
    DoButton.doClick();
}                                       

private void UButtonActionPerformed(java.awt.event.ActionEvent evt) {                                        
    DoButton.doClick();
}                                       

private void VButtonActionPerformed(java.awt.event.ActionEvent evt) {                                        
    DoButton.doClick();
}                                       

private void WButtonActionPerformed(java.awt.event.ActionEvent evt) {                                        
    DoButton.doClick();
}                                       

private void XButtonActionPerformed(java.awt.event.ActionEvent evt) {                                        
    DoButton.doClick();
}                                       

private void YButtonActionPerformed(java.awt.event.ActionEvent evt) {                                        
    DoButton.doClick();
}                                       

private void ZButtonActionPerformed(java.awt.event.ActionEvent evt) {                                        
    DoButton.doClick();
}                                       

private void DoButtonActionPerformed(java.awt.event.ActionEvent evt) {                                         
    JButton button = (JButton) evt.getSource();
    String currentLetter = button.getText(); 

//replace underscores with letters as they are guessed
            do {
                for (int i = 0; i < 1; i++) {
                    secretWord = secretWord + currentLetter.charAt(0);
                    foundWord = words[0].replaceAll("[^" + secretWord + "]", "_ ");
                //if letter isn't in word
                    if (guessWord.indexOf(currentLetter) == -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();
                            secretWord = "";
                            foundWord = null;
                            String strLosses = Integer.toString(losses);
                            String strWin = Integer.toString(wins);
                            DirectionsFrame.WinsLabel.setText(strWin);
                            DirectionsFrame.LossesLabel.setText(strLosses);
                        }
            }
        }
                WordLabel.setText(foundWord.toUpperCase());
            } 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();
                secretWord = "";
                foundWord = null;
                String strWin = Integer.toString(wins);
                String strLosses = Integer.toString(losses);
                DirectionsFrame.WinsLabel.setText(strWin);
                DirectionsFrame.LossesLabel.setText(strLosses);
            }
}                                        
4

3 に答える 3

3

アクション リスナーを作成します。

ActionListener al = new ActionListener() {
    public void actionPerformed(ActionEvent evt) {
        Object src = evt.getSource();
        if (evt instanceof JButton) {
            currentLetter = ((JButton) src).getText();
            // do something with letter
        } // else something seriously wrong
    }
};

次に、このアクション リスナーを の各ボタンに追加しますalphabet

for (JButton button : alphabet) {
    button.addActionListener(al);
}

編集initComponents()更新されたコードに実装が表示されません。いずれにせよ、各ボタンにアクション リスナーを追加するのは一度だけです。実装を開始する方法は次のinitComponents()とおりです。

private static String[] letters = { "A", "B", "C", "D", "E", "F",
    "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R",
    "S", "T", "U", "V", "W", "X", "Y", "Z" };
private JButton[] letterButtons = new JButton[letters.length];

private void initComponents() {
    ActionListener al = new ActionListener() {
        public void actionPerformed(ActionEvent evt) {
            Object src = evt.getSource();
            if (evt instanceof JButton) {
                currentLetter = ((JButton) src).getText();
                // do something with letter
            } // else something seriously wrong
        }
    };
    for (int i = 0; i < letters.length; ++i) {
        letterButtons[i] = new JButton(letters[i]);
        letterButtons[i].addActionListener(al);
    }
    . . .
    // add all the buttons to the user interface
    . . .
}  

より多くの配列を使用してコードを簡素化してください! 文字ボタンごとに個別の変数や、文字のクリックごとに個別に処理するための 26 の個別のメソッドはありません。

于 2012-11-11T16:45:23.087 に答える
1

はい、ActionListenerすべてのボタンにシングルを使用して、クリックされたものだけでなく、そのテキストを取得することもできます。リスナーでは、次を使用できます。

public void actionPerformed(ActionEvent e) {
    JButton button = (JButton) e.getSource();
    String currentLetter = button.getText(); 
    updateWord(currentLetter);
}

わかったら、必要な文字などを明らかにするためにcurrentLetter、それをヘルパー メソッドに渡すことができます。updateWord

private void updateWord(String currentLetter) {
 // reveal letters
 // increment 'Hangman' guess counter
}

アクションリスナーの書き方を読んでください

また、ボタン間で機能を共有するためにアクションを使用することも検討してください。

于 2012-11-11T16:46:06.723 に答える
0

「AButton」や「BButton」などを使用しないのが良い解決策です。

あなたが言ったように、ボタン配列 (長さ 26) ですべてを行うことができます!

ループで初期化し、26 個のボタン インスタンスを作成し、ActionListener を登録します (26 個ではなく常に同じです)。

Array-Index から対応する文字を取得できます。

どのように?ASCII テーブルを取得します。大文字のみを使用したい場合、A の値は 65 です。

各ボタンは文字に対応しています

65 + indexOf(ボタン)

ボタン[0] -> 65+0 = 'A' ボタン[1] -> 65+1 = 'B'

あなたはアイデアを得る。

単一の ActionListener は、同じメソッドを使用して対応する文字を取得できます。

char theLetter = (char) 65 + buttonArray.indexOf(e.getSource())

これで完了です。

プログラミングは、どうにかして完成させることではないと思います。常に完璧なソリューションを探す必要があります。その解決策が難しい場合は、その方法を学ぶ必要があります。

よろしく!

于 2012-11-11T17:14:42.417 に答える