所以我试图让我的程序更有条理。为此,我在包含我的方法的文件中,另一个文件包含事件侦听器和变量。第二个文件需要使用第一个文件中的方法更改变量等等。第一个需要使用第二个变量才能正常运行。基本上:
public class Controls extends javax.swing.Jfarme{
int turns = 0;
int stuff = btnSet(jButton1);
}
public class GamePlay{
public int btnSet(javax.swing.JButton btn){
//do stuff using turn
turn++;
}
}
这有意义吗?我怎样才能让这两个人分享?
编辑:我想要两个类来保持更好的组织。我做了TicTacToe,然后是TicTacTwo,现在是TicTacCube。它只是变得有点混乱(我现在有 243 个 JButton 需要跟踪(。我只想将我的方法与正在执行的代码分开,以便漂亮。
免责声明:当然,有很多方法可以设计应用程序的类体系结构,因此以下只是一种方法(但不是最糟糕的(。
我的印象是你还没有采用面向对象设计和编程的概念。
如果你向别人描述(游戏?(应用程序,你肯定会使用很多名词和动词。经验法则是用名词做类,用动词做方法。我想"控件"(尤其是因为它是复数形式(和"游戏玩法"这两个词不会是你描述中最突出的词,所以不要从那里开始。相反,我希望有像"玩家"、"棋盘"或"人物"这样的名词,以及像"移动"、"收集"、"射击"这样的动词或任何你的游戏内容。对于动词,成为方法,你必须决定它们属于哪个类,你主要通过回答谁或什么是句子的主语的问题来做到这一点,例如move()
应该成为一种Figure
的方法,因为不是棋盘或玩家在移动,而是棋盘上的人物。
在进一步设计类时,请专注于实体的内部工作("业务逻辑"(,而不是用户界面 - 用户界面应保留在不同的类中。
因此,这样一个应用程序的体面设计可能会有一个具有应用程序顶级工作流的GamePlay
类,但GamePlay
不应该包含任何用户界面 (javax.swing.*( 元素。用户界面(可能类似于您的Controls
类(应仅通过调用GamePlay
及其同伴的某些方法而不是通过读取字段来与它们进行通信。
附言:关于StackOverflow上的问题:最好将部分真实代码复制到问题中,这样就可以避免像Jfarme
这样的错别字而不是JFrame
。
要使其与您当前的设计配合使用:
-
若要使用
Controls
类中的btnset()
函数,请将GamePlay
类导入Controls
类,然后实例化GamePlay
类对象以访问其btnset()
函数。 前任。GamePlay gameplay = new GamePlay();
gameplay.btnset();
-
若要在
GamePlay
类中使用turns
变量,请将Controls
类导入GamePlay
类,然后实例化Controls
类对象以访问其turns
变量。 前任。Controls controls = new Controls();
controls.turns++;
或者,您可以将方法或变量设置为静态,这样就不需要先实例化对象。 如果方法/变量是静态的,你可以只调用GamePlay.btnset();
或Controls.turns++;
据我所知,实际上有两种方法可以做到这一点:静态或使用对象(Java毕竟是一种面向对象的语言(
静态
对此的静态方法实际上意味着所有变量和方法都属于类本身。这需要将关键字static
放在 Controls 类中的所有变量和 GamePlay 类中的所有方法之前。然后,这些都将通过ClassName.variable
或ClassName.method()
访问,例如Controls.turns
或GamePlay.btnSet(btn)
使用对象
这种方法意味着创建类的新实例,每个实例都有自己的实例变量和方法,可以使用instance_name.variable
或instance_name.method()
进行访问。这将涉及创建类的实例,例如Controls controls_instance = new Controls()
或GamePlay gameplay_instance = new GamePlay()
,然后引用它们的属性,例如controls_instance.turns
或gameplay_instance.setBtn(btn)