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

尽管它可能很脏,但您可以做到这一点的一种方法是获取 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();

}
}

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

于 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,那么每当你初始化一个新游戏时你就不会重新创建它。

将程序逻辑与 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 回答