我正在制作一个国际象棋游戏,需要弄清楚如何移动棋子。我将我的棋子存储在数组 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/