java - 如何采取第二个 Action 来移动棋子?

标签 java swing chess

我正在制作一个国际象棋游戏,需要弄清楚如何移动棋子。我将我的棋子存储在数组 squaresGrid[][] 中,并且我想使用方法 moveTo 来移动棋子。目前,此方法只是标记选定的棋子,但我需要第二次单击鼠标来选择要将选定棋子移动到的方 block ,但我不确定如何最好地做到这一点。

    public void actionPerformed(ActionEvent e)
    {
        for(int x = 0; x < 8; x++)
        {
            for(int y = 0; y < 8; y++)
            {
                if(e.getSource() == squaresGrid[x][y])
                {
                    moveTo(e, squaresGrid[x][y]);
                }
            }
        }   
    }

    public void moveTo(ActionEvent e, JButton clicked)
    {
        clicked.setIcon(selected);
    }

最佳答案

您不执行“第二个actionPerformed”。您要做的就是保持状态,当发生点击时,查看状态,并决定应该采取什么操作。

例如,保留一个名为 currentlySelected 的字段,指向当前选定的方 block (例如包含其坐标)。

actionPerformed 中,当您收到点击时,您会查看 currentlySelected

  • 如果为空,则意味着您应该选择单击的方 block 并将其放入currentlySelected
  • 如果它不为空,并且当前点击位于同一个方 block 中,则用户可能想要取消选择它。在currentlySelected中取消选择并清除(置空)。
  • 如果不为空且不在同一个方格,则意味着您必须检查该移动是否合法。如果合法,您可以进行移动,并清除currentlySelected。如果不合法,您可以做您认为正确的事情:也许取消选择原来的位置并选择新的位置。或者只是取消选择并告诉用户此举不合法。或者保持选中状态。

请记住在适当的情况下始终清除您的currentlySelected

关于java - 如何采取第二个 Action 来移动棋子?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28765355/

相关文章:

algorithm - 给定一个马和棋盘上某些棋子的位置,马要杀死所有棋子最少需要跳多少步?

java - 使用 minimax 的 tic-tac-toe 可以使用多少个线程?

Java 和 Hyper-V

java - Java 中的++i+++i+++i 与 C

Java - 根据单元格内容更改行颜色

java - 如何在 Java 中跨 JPanel 移动图像?

java - 在 Java 网格中更改 ImageIcon

java - 在 java.time.LocalTime 之间(第二天)

java - 将 JLabel 添加到 JPanel 时出现问题

c - 如何有效地编码/解码压缩的位置描述?