public void moverPieza(Posicion posOrigen, Posicion posDestino) throws ApplicationException {
    Pieza pieza = partida.getColPiezas().get(posOrigen);
    try {
      if (pieza.getColor().equals(partida.getTurno())) {
        if (pieza.movimientoValido(posDestino)) {
          Pieza piezaObjetivo = partida.getColPiezas().get(posDestino);
          if (piezaObjetivo != null) {
            if (!piezaObjetivo.getColor().equals(partida.getTurno())) {
              partida.getColPiezas().remove(posDestino);
              // Usamos la posicion z0 para eliminar una pieza sin borrar el registro en la tabla
              Posicion posEliminado = new Posicion('z', 0);
              dp.moverPieza(piezaObjetivo, partida, posEliminado);
            } else {
              throw new ApplicationException(
                  "La posición de destino contiene una pieza del mismo jugador que está efectuando el movimiento",
                  null);
            }
          }
          dp.moverPieza(pieza, partida, posDestino);
          pieza.setPosicion(posDestino);
          partida.getColPiezas().remove(posOrigen);
          partida.getColPiezas().put(posDestino, pieza);
          Jugador jugadorActual = null;
          if (partida.getTurno().equals("blanco")) {
            partida.setTurno("negro");
            jugadorActual = partida.getJugadorBlancas();
          } else {
            partida.setTurno("blanco");
            jugadorActual = partida.getJugadorNegras();
          }
          dp.actualizarTurno(partida.getIdPartida(), partida.getTurno());
          if (piezaObjetivo != null && piezaObjetivo.getTipoPieza().equals("R")) {

            throw new EndGameException(
                "Felicidades "
                    + jugadorActual.getNombre()
                    + " "
                    + jugadorActual.getApellido()
                    + " ha ganado la partida!!!",
                null);
          }
        } else {
          throw new ApplicationException("El movimiento introducido no es válido", null);
        }
      } else {
        throw new ApplicationException(
            "La pieza seleccionada para mover no corresponde al jugador del turno", null);
      }
    } catch (NullPointerException e) {
      throw new ApplicationException(
          "No se encontro pieza en la posicion ingresada como destino", e);
    }
  }
 public void eliminarPartida(int idPartida) throws ApplicationException {
   dp.eliminarPartida(idPartida);
 }
 public Partida recuperarPartida(Jugador j1, Jugador j2) throws ApplicationException {
   partida = dp.recuperarPartida(j1, j2);
   return partida;
 }