使用Java进行简单的井字游戏。
我有一个名为TicTacToe
的类,其中包含大部分程序。
我有一个名为GameHelpers
的类,它应该包含帮助游戏的方法。
类TicTacToe
包含一个数组(JButton buttons[9]
)和一个int count
变量,用于存储用户已经在屏幕上放置了多少X和Os。 (每次用户单击按钮时,它的空白文本将更改为X或O,计数变量将计为++)。
目前,我计划在GameHelpers
内编写的唯一方法是名为resetGame()
的方法。这种方法应该做两件事:
1-在buttons
空白的所有按钮上设置文本
2-将count
设置为0。
如果resetGame()
是TicTacToe
内的方法,则很容易。它看起来像这样:
resetGame(){
for(int i=0;i<9;i++){
buttons[i].setText("");
}
count = 0;
}
但resetGame()
应该是另一个类GameHelpers
内的方法。
我认为我正在尝试做的是非常标准的面向对象编程。这个程序的大部分都有一个类,另一个小类有一些方法可以帮助更大的类。该程序总是围绕更大的类(TicTacToe
)。
我有两个问题:
1-上面描述的想法(关于程序围绕的一个主要类,以及帮助的小类),面向对象程序中的标准和通用?
2-您如何编码resetGame()
内的方法GameHelpers
?
谢谢
答案 0 :(得分:1)
1.-可以使用这种技术,但程序必须依赖的类越少越好。我没有看到简单地在TicTacToe中使用#resetGame方法的问题。
2 .-
public class GameHelper {
public static void resetGame() {
for(int i=0;i<9;i++){
TicTacToe.buttons[i].setText("");
}
TicTacToe.count = 0;
}
}
然后您可以使用以下方法从TicTacToe调用此方法:
GameHelper.resetGame();
在这种情况下,GameHelper类是多余的,但我不知道你的程序的完整意图。
答案 1 :(得分:-1)
最佳做法是为你的计数和按钮编写setter和getter,如下所示:(对于计数):
public int getCount() {
return count;
}
public void setCount(int count) {
this.count = count;
}
然后您可以通过以下方式在其他课程中访问它:
TicTacToe ttt = new TicTacToe();
ttt.setCount(0);
由于你不想要一个新的TicTacToe实例,我想你可以这样做:
在GameHelper中写private TicTacToe ttt;
然后
public GameHelper(TicTacToe ttt) {
this.ttt = ttt;
}
然后您不必创建新实例,而是在创建GameHelper时传递实例。因此,在初始化GameHelper的TicTacToe中,您可以编写GameHelper gh = new GameHelper(this);
我在这里为你做了一个例子:
public class TicTacToe {
private int count = 0;
public TicTacToe() {
count = 3;
GameHelper gh = new GameHelper(this);
}
public void setCount(int count) {
this.count = count;
}
public int getCount() {
return count;
}
public void printCount() {
System.out.println("Count:"+count);
}
}
public class GameHelper {
TicTacToe ttt;
public GameHelper(TicTacToe ttt) {
this.ttt = ttt;
this.ttt.setCount(5);
this.ttt.printCount();
}
}
public class Test {
public static void main(String[] args) {
TicTacToe ttt = new TicTacToe();
}
}