国际象棋 GUI - 在调用函数之前获得 2 次用户点击 - Java

Chess GUI - Getting 2 user clicks before calling a funtion - Java

我正在尝试制作一个简单的国际象棋 GUI,它只包含一个 gridLayout,其中每个方块由一个按钮组成,每个按钮都有一个 ActionListener 并且独立于实际游戏工作,只有 "printing out" 什么董事会正在发生 class.

private JButton[][] squares = new JButton[8][8];
private Color darkcolor = Color.decode("#D2B48C");
private Color lightcolor = Color.decode("#A0522D");
public ChessGUI(){
    super("Chess");
    contents = getContentPane();
    contents.setLayout(new GridLayout(8,8));

    ButtonHandler buttonHandler = new ButtonHandler();

    for(int i = 0; i< 8; i++){
        for(int j = 0;j < 8;j++){
            squares[i][j] = new JButton();
            if((i+j) % 2 != 0){
                squares[i][j].setBackground(lightcolor);
            }else{
                squares[i][j].setBackground(darkcolor);
            }
            contents.add(squares[i][j]);
            squares[i][j].addActionListener(buttonHandler);
            squares[i][j].setSize(75, 75);

        }
    }
    setSize(600, 600);
    setResizable(true);
    setLocationRelativeTo(null);
    setVisible(true);
}
private class ButtonHandler implements ActionListener{
    public void actionPerformed(ActionEvent e){
        Object source = e.getSource();
        for(int i = 0;i< 8; i++){
            for(int j = 0;j < 8;j++){
                if(source == squares[i][j]){
                    //Pass set of coordinates to game.Move(...)
                    return;
                }
            }
        }
    }
}

我需要将 2 组坐标,"from" 和 "to" 传递给 game.Move(...) 函数(应用游戏移动逻辑的函数),其中每组坐标都是通过单击按钮给出的。

我应该如何处理在调用 game.Move(...) 函数之前需要等待用户进行 2 次点击的事实?好像一次只能传递一组坐标。

如有任何帮助,我们将不胜感激。

在游戏对象中,您可能应该有字段变量来存储起点和终点坐标,而不是将它们传递给 game.move 函数。你可以做一个从0开始的计数器,当它是0时,它会处理"from"点击(将Game中的"from"变量设置为被点击的坐标),当它是1时,它将处理 "to" 单击(在游戏中设置 "to" 变量),调用移动,并将计数器重置为 0。