java重置游戏方法,播放的游戏数量不增加

时间:2014-12-07 18:15:30

标签: java swing jframe reset

我正在尝试整理游戏,但是,我不确定如何解决重置功能。我已经做到这一点,游戏重置,然而,这在游戏重启时起作用,应该显示玩家玩过多少游戏的标签不会从0改变。看看我到目前为止做了什么。

标签的显示和定位......

private int noGamesPlayed;
private JLabel gamesPlayed = new JLabel("Games Played = " + noGamesPlayed);
getContentPane().add(gamesPlayed);
gamesPlayed.setBounds(60,60+gridsize*boardsize,130,30);

重置功能......

public void reset(){

 game.this.setVisible(false);
 game.this.dispose();
 new game();
 updateGamesPlayed();   
}

假设更新所玩游戏的功能......

 public void updateGamesPlayed() {
 noGamesPlayed ++;
 gamesPlayed.setText("" + noGamesPlayed + " Games Played");

}

帮助感谢。

2 个答案:

答案 0 :(得分:1)

将noOfGamesPlayed变量更改为static。该字段不属于对象,而属于类本身。然后,将updateGamesPlayed更改为静态方法,这样所有游戏对象都会看到相同的numberOfGamesPlayed计数。像那样:

private static int noGamesPlayed = 0;

public static void updateGamesPlayed() {
    noGamesPlayed ++;
}

然后,在重置方法上,在更新游戏数量后创建一个新游戏

public void reset(){
    game.this.setVisible(false);
    game.this.dispose();
    updateGamesPlayed();   
    new game();
}

您也可以自动生成"通过递增游戏构造函数上的noGamesPlayed。这样您就不需要致电updateGamesPlayed

答案 1 :(得分:0)

您正在创建一个全新的游戏对象,一个拥有自己的noGamesPlayed变量和JTextField,并且此方法调用可能不会更改新显示的GUI中的gamesPlayed JTextField

gamesPlayed.setText("" + noGamesPlayed + " Games Played"); 

而是更新已经处理的GUI的JTextField。请注意,您的重置方法看起来是递归的。

一种解决方案是调用新创建的游戏对象的updateGamesPlayed(...)方法(注意该类应重命名为Game),并传入正确的数字作为参数。

我自己,我会以完全不同的方式重置我的游戏,不是创建一个新窗口,而是更新关键模型变量(非GUI变量和确定程序状态的类)然后使用这些变量重置当前显示。