4

このtictactoeプログラムは2人用ゲームです。私が作ったGUIはフレームとボタンで、その後コーディングを始めました。実際、私のプログラムはこの種のコーディングで動作しています。

private String letter= " ";
private int count= 0;


    private void btn7ActionPerformed(java.awt.event.ActionEvent evt) {                                     
        count++;
                if(count == 1 || count == 3 || count == 5 || count == 7 || count == 9){

                letter = "X";

                } else if(count == 2 || count == 4 || count == 6 || count == 8 || count == 10){

                letter = "O";

                }

        if(evt.getSource() == btn1){

                        btn1.setText(letter);

                } else if(evt.getSource() == btn2){

                        btn2.setText(letter);

                } else if(evt.getSource() == btn3){

                        btn3.setText(letter);

                } else if(evt.getSource() == btn4){

                        btn4.setText(letter);

                } else if(evt.getSource() == btn5){

                        btn5.setText(letter);

                } else if(evt.getSource() == btn6){

                        btn6.setText(letter);

                } else if(evt.getSource() == btn7){

                        btn7.setText(letter);

                } else if(evt.getSource() == btn8){

                        btn8.setText(letter);

                } else if(evt.getSource() == btn9){

                        btn9.setText(letter);




    }         
    }                                    

    private void btn1ActionPerformed(java.awt.event.ActionEvent evt) {                                     
    count++;
                if(count == 1 || count == 3 || count == 5 || count == 7 || count == 9){

                letter = "X";

                } else if(count == 2 || count == 4 || count == 6 || count == 8 || count == 10){

                letter = "O";

                }

        if(evt.getSource() == btn1){

                        btn1.setText(letter);

                } else if(evt.getSource() == btn2){

                        btn2.setText(letter);

                } else if(evt.getSource() == btn3){

                        btn3.setText(letter);

                } else if(evt.getSource() == btn4){

                        btn4.setText(letter);

                } else if(evt.getSource() == btn5){

                        btn5.setText(letter);

                } else if(evt.getSource() == btn6){

                        btn6.setText(letter);

                } else if(evt.getSource() == btn7){

                        btn7.setText(letter);

                } else if(evt.getSource() == btn8){

                        btn8.setText(letter);

                } else if(evt.getSource() == btn9){

                        btn9.setText(letter);

ええ、実際には機能していますが、このコードに関する私の問題は、すべてのボタンにコードを配置する必要があることです。

各ボタンが実行するコマンドは 1 つだけで、同じコードであるため、すべてのボタンにコピー ペーストしたくありません。それを行うためのコードがあると思いますが、どう思いますか? 助けてください!

4

2 に答える 2

3

コードは次の形式に圧縮できますが、このゲームロジックをどのように解決しようとしているのか本当にわかりません。

int count = -1;
String letter = "";  
JButton[] button = new JButton[9];  // These three being your Instance Variables
for (int i = 0; i < 9; i++, counter++)
{
    final int counter = i;
    button[i] = new JButton("");
    button[i].addActionListener(new ActionListener()
    {
        @Override
        public void actionPerformed(ActionEvent ae)
        {
            count++;
            if (count % 2 != 0)
                letter = "X";
            else
                letter = "O";
            button[counter].setText(letter); 
        }
    });
}
于 2012-10-31T06:34:28.447 に答える
2

したがって、基本的には、ロジックを 1 つのハンドラーにまとめる必要があります。このハンドラーは、動作しているボタンへの単一の参照を必要とします...

何かのようなもの...

public class ActionHandler implements ActionListener {

    private JButton master;

    public ActionHandler(JButton master) {
        this.master = master;
    }

    protected void setText(String text) {
        master.setText(text);
    }

    @Override
    public void actionPerformed(ActionEvent e) {

        String text = null;

        count++;
        if (count / 2f == Math.round(count / 2f)) {
            text = "O";
        } else {
            text = "X";
        }

        setText(text);

    }

}

セットアップコードはこれとは異なる場合があります。これは単なる例です...

buttons = new JButton[9]; // You can use this to reset the board ;)
setLayout(new GridLayout(3, 3));
for (int index = 0; index < 9; index++) {
    JButton btn = new JButton(Integer.toString(index));
    buttons[index] = btn;
    btn.addActionListener(new ActionHandler(btn));
    add(btn);
}

基本的な考え方は、新しいボタンを作成するときActionHandlerに、ボタンの参照を渡す独自のボタンを割り当てることです。これにより、アクション ハンドラーはゲームの状態に基づいてボタンを制御できます。

于 2012-10-31T06:07:59.973 に答える