@Override public void actionPerformed(ActionEvent e) { JButton button = (JButton) e.getSource(); Point rv = new Point(); int rank = button.getLocation(rv).y / 100; int file = button.getLocation(rv).x / 100; Piece selection = game.gameBoard.spaces[rank][file]; if (selectedPiece != null) { boolean reachable = false; Vector<Space> showMoves = BoardLogic.movesOnBoard(game.gameBoard, selectedPiece); for (int i = 0; i < showMoves.size(); i++) { if (showMoves.elementAt(i).getFile() == file && showMoves.elementAt(i).getRank() == rank) reachable = true; } if (reachable == false) { JOptionPane.showMessageDialog(null, "Selected space is unreachable"); JButton moves; for (int i = 0; i < showMoves.size(); i++) { moves = jButtonList[showMoves.elementAt(i).getRank()][showMoves.elementAt(i).getFile()]; Border thickBorder = new LineBorder(Color.BLACK, 1); moves.setBorder(thickBorder); } selectedPiece = null; } else { game.move.push( new Step( selectedPiece.getRank(), selectedPiece.getFile(), rank, file, game.gameBoard.spaces[rank][file])); BoardLogic.movePiece(game.gameBoard, selectedPiece, rank, file); JButton moves; for (int i = 0; i < showMoves.size(); i++) { moves = jButtonList[showMoves.elementAt(i).getRank()][showMoves.elementAt(i).getFile()]; Border thickBorder = new LineBorder(Color.BLACK, 1); moves.setBorder(thickBorder); } Icon img = selectedSquare.getIcon(); button.setIcon(img); selectedSquare.setIcon(null); currPlayer = game.nextPlayer(currPlayer); selectedPiece = null; // memorization if (BoardLogic.inCheckmate(game.gameBoard, currPlayer.pieceColor)) { JOptionPane.showMessageDialog( null, currPlayer.name + " is in CheckMate, " + game.nextPlayer(currPlayer).name + " win!"); game.nextPlayer(currPlayer).score++; } else if (BoardLogic.inStalemate(game.gameBoard, currPlayer.pieceColor)) { JOptionPane.showMessageDialog(null, "The game is in StaleMate"); currPlayer.score++; game.nextPlayer(currPlayer).score++; } else if (BoardLogic.inCheck(game.gameBoard, currPlayer.pieceColor)) { JOptionPane.showMessageDialog(null, currPlayer.name + " is in Check"); } } } else if (selection.getColor() == currPlayer.pieceColor) { JButton moves; selectedPiece = game.gameBoard.spaces[rank][file]; Vector<Space> showMoves = BoardLogic.movesOnBoard(game.gameBoard, selectedPiece); for (int i = 0; i < showMoves.size(); i++) { moves = jButtonList[showMoves.elementAt(i).getRank()][showMoves.elementAt(i).getFile()]; Border thickBorder = new LineBorder(Color.YELLOW, 3); moves.setBorder(thickBorder); } selectedSquare = button; } }