我正在尝试整理游戏,但是,我不确定如何解决重置功能。我已经做到这一点,游戏重置,然而,这在游戏重启时起作用,应该显示玩家玩过多少游戏的标签不会从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");
}
帮助感谢。
答案 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变量和确定程序状态的类)然后使用这些变量重置当前显示。