我正在为Java项目创建一个TicTacToe程序。我使用带有3x3面板的swing作为GUI,并将按钮集成到每个框中供用户单击。问题是,我不知道如何运行WinCondition方法(意味着用户连续获得3个)。我无法将其调用为button类中的actionPerformed方法,并且我不知道在其他地方可以调用它。
我有两个类,一个是按钮类,另一个是为用户创建面板的实际游戏。
我尝试过考虑在其他地方可以实现它,但是我不能这样做,因为除了actionPerformed方法之外,当按下按钮时,我不知道另一种执行代码的方法。
public class TicTacGame extends JFrame{
/**
*
*/
private static final long serialVersionUID = 1L;
JPanel p = new JPanel();
XOButton[] buttons = new XOButton[9];
public TicTacGame() {
super("TicTacToe");
setSize(400,400);
setResizable(false);
setDefaultCloseOperation(EXIT_ON_CLOSE);
p.setLayout(new GridLayout(3,3));
for(int i = 0; i < 9; i++) {
buttons[i] = new XOButton();
p.add(buttons[i]);
}
add(p);
setVisible(true);
}
public int winCondition() {
//I have left out the win condition method so this box doesn't get unnecessarily long
}
public static void main(String[] args) {
TicTacGame ttg = new TicTacGame();
}
}
public class XOButton extends JButton implements ActionListener{
/**
*
*/
private static final long serialVersionUID = 1L;
ImageIcon X;
ImageIcon O;
//0 is nothing, 1 is X, 2 is O
int value = 0;
public static int turn = 1;
public XOButton() {
X = new ImageIcon(this.getClass().getResource("X.png"));
O = new ImageIcon(this.getClass().getResource("O.png"));
addActionListener(this);
}
public int getValue() {
return this.value;
}
public void actionPerformed(ActionEvent e) {
if(turn >= 5) {
int win = ttg.winCondition();
}
if(turn % 2 == 0) {
value += 2;
turn++;
}
else {
value++;
turn++;
}
value %= 3;
switch(value) {
case 0:
setIcon(null);
break;
case 1:
setIcon(X);
removeActionListener(this);
break;
case 2:
setIcon(O);
removeActionListener(this);
break;
}
}
}
我希望每当单击一个按钮时,都会执行winCondition()方法来检查用户是否赢了。
答案 0 :(得分:0)
有很多方法可以做到其中之一
不要 创建静态的win方法,以便您可以从任何其他类进行访问。有关更多信息,请阅读下面的评论
1)您可以将TicTacGame类的引用传递到构造函数中的XOButton类中。以便您可以访问TicTacGame类中的任何其他函数
2)您可以使用界面...等