Я создаю программу TicTacToe для проекта Java. Я использую Swing с панелью 3x3 в качестве графического интерфейса и интегрирую кнопки в каждом окне, чтобы пользователь мог щелкнуть. Проблема в том, что я не знаю, как запустить метод WinCondition (то есть, когда пользователь получает 3 подряд). Я не могу вызвать его для метода 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 (), чтобы проверить, выиграл пользователь или нет.