简单的记忆游戏与重播按钮

时间:2012-05-10 10:27:14

标签: java swing jbutton actionlistener

我想构建一个简单的记忆游戏。我想放一个重播按钮,再次播放记忆游戏。

我已经构建了一个名为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 个答案:

答案 0 :(得分: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();

}
}

这个应用程序的功能是它有两个按钮。一个更改颜色,另一个重置应用程序本身。

答案 1 :(得分: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();
   }
}

答案 2 :(得分:0)

您应该考虑重新分解代码,以便MemoryGame类不创建GUI,然后在初始化新游戏时不会重新创建它。

将程序逻辑与UI代码分开是个好主意。

答案 3 :(得分: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;

    }