我正试图用Java进行国际象棋游戏。我目前有一个8 x 8的2D阵列" Squares"一个包含一个按钮和一个" Piece"这些部分有一个名为hasMoved
的字段,我试图在我的按钮的动作监听器中改变一些逻辑。
在下面的代码之前,我正在测试所需的移动是否合法,如果是,我执行移动"在哪里我更新旧方块没有一块并将新的正方形块设置为等于旧的正方形块。我也试图将该部分更新为hasMoved = true;
列和行值是我创建它时动作侦听器集的值,所以如果我按左下方的方式,动作侦听器列为0,行为7
boardManager.currentBoard.squaresOnBoard[column][row].occupiedPiece.hasMoved = true;
当我注意到它们几乎都设置为true时,我正在打印并检查另一块的hasMoved
状态。我仔细检查过这是我在整个程序中对这个字段执行的唯一赋值操作,我确实将它的值称为我的一些移动逻辑,但从未将其分配给任何东西。
以下是每个按钮的动作侦听器代码片段,如果所需的移动位于合法移动列表中,则会执行该代码。
if(isLegalMove){
//setting new icon to the icon of the old piece
boardManager.currentBoard.squaresOnBoard[column][row].button.setIcon(selectedPieceIcon);
//setting new space to have the piece of the old space
boardManager.currentBoard.squaresOnBoard[column][row].occupiedPiece = selectedPiece;
boardManager.currentBoard.squaresOnBoard[column][row].occupiedPiece.hasMoved = true;
System.out.println(boardManager.currentBoard.squaresOnBoard[column][row].occupiedPiece.hasMoved);
// setting the old square to empty bc we moved
boardManager.currentBoard.squaresOnBoard[selectedPieceColumn][selectedPieceRow].button.setIcon(null);
boardManager.currentBoard.squaresOnBoard[selectedPieceColumn][selectedPieceRow].occupiedPiece = null;
boardManager.artificalIntelligence.performRandomLegalComputerMove();
boardManager.currentBoard.printBoard();
boardManager.moveGenerator.generateAllFullyLegalHumanMoves(boardManager.currentBoard);
boardManager.selectedAPieceToMove = false;
}else{
System.out.println("This is not a legal move for this piece.");
}
为什么不仅仅是按下按钮的索引,即[列] [行]在此动作事件期间发生变化?我对此的本质感到困惑。