我想构建一个简单的记忆游戏。我想放一个重播按钮,再次播放记忆游戏。
我已经构建了一个名为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知识非常有限,通常我会创建更少的方法并将其转移到方法中。
我会尝试重做我的程序。
感谢您的建议。
答案 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;
}