private void click(ActionEvent e) {

    estado = estado == 0 ? 1 : estado;

    switch (estado) {
      case 1:
        desde.append(e.getActionCommand());
        estado = 2;
        colorDesde = botones.get(desde.toString()).getBackground();
        botones.get(desde.toString()).setBackground(Color.RED);
        movimientosPosibles = ca.getMovimientosPosibles(desde, lado);
        if (movimientosPosibles.length == 1) { // No deja mover desde una posición sin pieza
          botones.get(desde.toString()).setBackground(colorDesde);
          desde.delete(0, 2);
          estado = 0;
          break;
        }
        if (movimientosPosibles.length == 2) {
          txtInfo.setText("Le toca al otro jugador");
          botones.get(desde.toString()).setBackground(colorDesde);
          desde.delete(0, 2);
          estado = 0;
        } else {
          actualizarTablero(movimientosPosibles);
        }
        break;

      case 2:
        hasta.append(e.getActionCommand());
        if (desde
            .toString()
            .equals(
                hasta.toString())) { // Si hago click en la misma posición se cancela el movimiento
          txtInfo.setText("");
          botones.get(desde.toString()).setBackground(colorDesde);
          hasta.delete(0, 2);
          desde.delete(0, 2);
          estado = 0;
          despintarTablero();
          break;
        }
        int columnaHasta = Character.getNumericValue(hasta.charAt(0)) - 10;
        int filaHasta = Character.getNumericValue(hasta.charAt(1)) - 1;
        if (movimientosPosibles[filaHasta][columnaHasta]
            == 1) { // Controla que hasta sea una posición dentro de las permitidas por array de
                    // movimientos posibles
          char[] pieza = ca.movimiento(desde, hasta);
          if (pieza[0] == 'F') {
            String texto = lado ? "Blancas ganan" : "Negras ganan";
            txtInfo.setText(texto);
          } else if (pieza[0] == 'P') {
            pieza[0] = promocion();
            txtInfo.setText("Promoción");
            actualizarTablero(
                pieza[0], desde, hasta, '\u0000'); // Cambiar pieza por lo que devuelva promocion
            botones.get(desde.toString()).setBackground(colorDesde);
            estado = 0;
            lado = lado ? false : true;
            desde.delete(0, 2);
          } else {
            actualizarTablero(pieza[0], desde, hasta, '\u0000');
            botones.get(desde.toString()).setBackground(colorDesde);
            estado = 0;
            lado = lado ? false : true;
            desde.delete(0, 2);
            if (txtInfo.getText().length() != 0) {
              txtInfo.setText("");
            }
          }
          actualizarComidas();
          actualizarActivo();
          if (pieza[1] != '\u0000') {
            StringBuilder desde1 = new StringBuilder();
            StringBuilder hasta1 = new StringBuilder();
            if (pieza[2] == '0') { // Lado blancas	1 + ?
              if (pieza[3] == '3') { // Izquierda ? + A			3 derecha 5 izquierda ? NO
                desde1.append("A1");
              } else if (pieza[3] == '5') { // Derecha ? + H
                desde1.append("H1");
              }
            } else if (pieza[2] == '7') { // Lado negras 8 + ?
              if (pieza[3] == '3') { // Izquierda ? + A
                desde1.append("A8");
              } else if (pieza[3] == '5') { // Derecha ? + H
                desde1.append("H8");
              }
            }

            switch (desde1.toString()) {
              case "A1":
                hasta1.append("D1");
                break;
              case "A8":
                hasta1.append("D8");
                break;
              case "H1":
                hasta1.append("F1");
                break;
              case "H8":
                hasta1.append("F8");
                break;
            }
            actualizarTablero(pieza[1], desde1, hasta1, 'E');
          }
        } else {
          txtInfo.setText("Movimiento ilegal");
        }
        hasta.delete(0, 2);

        break;

      default:
        break;
    }

    ca.actualizarTablero(estado);
  }