扫雷者Java继承
这个项目我有5门课,扫雷者Java继承,java,minesweeper,Java,Minesweeper,这个项目我有5门课,按钮雷区图形用户界面菜单栏游戏 按钮是一个单独的地雷单元 雷区包含一个2d按钮阵列,以及涉及所有按钮的操作 GUI是雷场网格上方的部分,显示重置按钮、经过的时间以及剩余的标志数量 Game将所有其他类放在面板中,并将它们放在小程序中。这里没有游戏逻辑 这是我的照片的截图 我在使用继承时遇到了问题。如果我能解决这个问题,我也能解决其他问题。它与调用超类中的方法有关 我的一个问题: 当右键单击按钮我的单元格时,鼠标侦听器会拾取该按钮,并将JButton的文本更改为“F”作为标志。
按钮
雷区图形用户界面
菜单栏
游戏
按钮
是一个单独的地雷单元
雷区
包含一个2d按钮阵列,以及涉及所有按钮的操作
GUI
是雷场网格上方的部分,显示重置按钮、经过的时间以及剩余的标志数量
Game
将所有其他类放在面板中,并将它们放在小程序中。这里没有游戏逻辑
这是我的照片的截图
我在使用继承时遇到了问题。如果我能解决这个问题,我也能解决其他问题。它与调用超类中的方法有关
我的一个问题:
当右键单击按钮
我的单元格时,鼠标侦听器会拾取该按钮,并将JButton
的文本更改为“F”作为标志。但是,我想更新可用标志数量的计数器,这是雷区
类中的一个变量。最后,我希望GUI
类侦听对该变量的更改,并更新JLabel
在按钮的鼠标侦听器中
:
if (e.getButton() == MouseEvent.BUTTON3)
{
advanceCurrentState();
if (currentState == "FLAG")
super.setNumFlagsRemaining(-1); //update the Minefields variable
}
回到雷区
:
public void setNumFlagsRemaining(int delta)
{
numFlagsRemaining += delta;
}
但这不起作用。调试时,super.setNumFlagsRemaining(-1)
正在创建Minefield
的新实例,我无法更新super类中的变量。我原以为它会更新Minefield的现有对象,但我读到Java不是通过引用传递的,所以我对如何做感到困惑。如果您需要查看其他代码,请这样说,我尽量不让这篇文章用5个完整的类来混乱,并说“修复它”。您没有提供足够的代码,所以我只能在这里猜测。
我想你把我搞糊涂了
它实际上意味着从继承的超类调用方法。
我怀疑JButton是否继承了你们班雷区的任何东西。通常情况是相反的
字段的计数也存储并显示在JLabel中。因此,实际上,您必须调用具有此JLabel并负责总计数的类的方法。这可能会有所帮助:调用super.setNumFlagsRemaining(-1)
不是创建新的雷区实例,而是更新当前雷区实例。在类中使用super一词指的是同一个实例,但它是父类型。我是否正确理解按钮
扩展了雷区
,但同时雷区
包含一个二维数组的按钮
呢?为什么要这样做?Tbh按钮
不应延伸雷区
。如果你在雷区
中有完整的游戏逻辑,那么每个按钮
将处理/修改自己的游戏逻辑。。。?我不理解这个层次结构…好吧,按照我的想法:雷区类只用于在开始时放置随机地雷,并遍历每个按钮并计算相邻地雷,将该信息存储在该按钮的实例中。按钮正在更改其状态,并具有布尔值isMine