Ejemplo n.º 1
0
    @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;
      }
    }