2

簡単な記憶ゲームを作りたいです。メモリーゲームをやり直すリプレイボタンをつけたいです。

という名前のクラスMemoryGameとメイン クラスを作成しました。

これがコードの一部ButtonListenerです。

public void actionPerformed(ActionEvent e) {
        if (exitButton == e.getSource()) {
            System.exit(0);
        }
        else if (replayButton == e.getSource()) {
            //How can I declare it? 
        }
}

リプレイボタンを次のように宣言すると:

new MemoryGame();

正常に動作しますが、別のウィンドウがポップアップします。

新しいウィンドウを表示せずに、現在の表示をクリアして最初に戻りたい。どうやってやるの?

編集 :

init()私のプログラムには、プログラムの初期状態である提案されたメソッドがないため、プログラムのコードを書き直す必要があると思います。

私の Java の知識は非常に限られており、通常は作成するメソッドは少なく、ほとんどをメソッドにダンプします。

プログラムをやり直してみます。

提案をありがとう。

4

4 に答える 4

1

汚いかもしれませんが、それを行う1つの方法は、MemoryGameコンストラクターを取得し、その中に別のメソッド内に物を置き、コンストラクターとボタンイベント内でそのメソッドを呼び出すことです。

例として、次のクラスを作成しましたが、前の手法を使用して自分自身をリセットします。

public class App extends JFrame{

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

public App(){
    init();
}

private JButton changeColorButton;
private JButton resetAppButton;
private JPanel panel;

private void init() {
    changeColorButton=null;
    resetAppButton=null;
    panel=null;

    this.setSize(200,400);
    this.setVisible(true);
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    panel = new JPanel();
    panel.setBackground(Color.white);
    panel.setPreferredSize(new Dimension(200,400));

    changeColorButton = new JButton("Change");
    changeColorButton.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            panel.setBackground(Color.black);
            panel.repaint();
        }
    });
    changeColorButton.setPreferredSize(new Dimension(100,100));

    resetAppButton = new JButton("Reset");
    resetAppButton.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            init();
        }
    });
    resetAppButton.setPreferredSize(new Dimension(100,100));

    panel.add(changeColorButton);
    panel.add(resetAppButton);

    this.add(panel);

    this.validate();

}
}

このアプリの機能は、ボタンが 2 つあることです。1 つは色を変更し、もう 1 つはアプリ自体をリセットします。

于 2012-05-10T11:01:26.923 に答える
1

MemoryGame初期状態を作成する方法の内部にあるものを示してください。ここで実際に人々が提案しているのは、MemeoryGameコンストラクターが呼び出すゲーム状態を設定する初期メソッドを持つことです。次に、ゲームのリプレイ ボタンでこのメソッドを呼び出します。

これらの行に沿ったもの:

void init(){
   this.x = 10;
   this.y = 10;
}

public MemoryGame(){
   init();
}

public void actionPerformed(ActionEvent e) {
   if (exitButton == e.getSource()) {
      System.exit(0);
   }
   else if (replayButton == e.getSource()) {
      init();
   }
}
于 2012-05-10T11:04:29.653 に答える
0

MemoryGame クラスが GUI を作成しないようにコードをリファクタリングすることを検討する必要があります。そうすれば、新しいゲームを初期化するたびに GUI を再作成する必要がなくなります。

プログラム ロジックを UI コードから分離しておくことをお勧めします。

于 2012-05-10T10:32:44.817 に答える
0

あなたができることは、JFrame で dispose() を呼び出すことです。これはそれを取り除き、次のようにタイトル画面に移動します:

ボタンコードはこちら

    public void actionPerformed(ActionEvent event)
    {

    if (closeButton = event.getSource())
    {

    System.exit(0);

    }

    if (playAgainButton = event.getSource())
    {

    Game.frame.dispose(); // Your class name, then the JFrame variable and call dispose

    }

    }

これは機能しますが、プログラムをリセットする際にいくつかの問題が発生する場合があります。その場合は、すべての変数をリセットして、playAgainButton がクリックされたときに呼び出すことができるリセット メソッドを作成します。例えば:

    public void reset()
    {

    // Right here you'd reset all your variables

    // Perhaps you have a gameOver variable to see if it's game over or not reset it

    gameOver = false;

    }
于 2013-11-22T05:42:55.957 に答える