扫雷Java继承

时间:2016-02-17 16:43:22

标签: java minesweeper

此项目有5个课程,Button Minefield GUI MenuBar Game

Button是一个单独的雷区。

Minefield包含一个2d按钮数组,以及涉及所有按钮的操作。

GUI是MineField网格上方的部分,显示重置按钮,已过去的时间以及剩余的标记数,

Game将所有其他类放在Panel中,并将它们放在applet中。这里没有游戏逻辑。

以下是我applet

的屏幕截图

我在使用继承方面遇到了问题。如果我能解决这个问题,我也可以解决其他问题。它与调用超类中的方法有关。

我的一个问题:

当右键单击Button我的单元格时,鼠标侦听器会将其拾取并将JButton的文本更改为“F”以获取标记。但是,我想更新有多少标志可用的计数器,这是Minefield类中的变量。最后,我希望GUI类侦听对该变量的更改并更新JLabel

MouseListener Button

 if (e.getButton() == MouseEvent.BUTTON3)
        {
           advanceCurrentState();     

           if (currentState == "FLAG")
             super.setNumFlagsRemaining(-1); //update the Minefields variable
        }

回到Minefield

   public void setNumFlagsRemaining(int delta)
    {
        numFlagsRemaining += delta;
    }

但这不起作用。当我调试时,super.setNumFlagsRemaining(-1)正在创建Minefield的新实例,我无法更新超类中的变量。我认为它会更新Minefield的现有对象,但我读到Java没有通过引用传递,所以我很困惑如何做到这一点。如果您需要查看其他代码请说明,我试着不要将这篇文章整理成5个整体并说“修复它”。

1 个答案:

答案 0 :(得分:1)

您没有提供足够的代码,所以我只能在这里猜测。 我认为你对key word super感到困惑 它实际上意味着从你继承的超类中调用方法。 我怀疑JButton从你的班级Minefield继承了什么。通常它是相反的。

此外,还会在JLabel中存储和显示字段数。实际上,你必须调用具有此JLabel的类的方法并负责总计数。