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 int mover(int finalPosX, int finalPosY, Trebejo treb, Partida part) { boolean encontroTrebejo = false; for (Trebejo t : part.getFichas()) { if (t.getPosX() == finalPosX && t.getPosY() == finalPosY) { encontroTrebejo = true; if (treb.movimientoPermitido(finalPosX, finalPosY, true)) { if (t.getColor() == treb.getColor()) { // No puedo mover return 1; } // Como else { part.getFichas().remove(t); ct.borrarTrebejos(t); ct.actualizarTrebejos(finalPosX, finalPosY, treb); int pos = this.buscarPosicion(treb, part); part.getFichas().get(pos).setPosX(finalPosX); part.getFichas().get(pos).setPosY(finalPosY); if (t.getTipo() == 'K') { cp.eliminarPartida(part); return 5; } // Cambio el turno part.setTurno(!part.getTurno()); cp.actualizarPartida( part.getBlanco().getDni(), part.getNegro().getDni(), part.getTurno()); return 2; } } // Si el movimiento no es permitido else return 4; } } ; if (!encontroTrebejo) { if (treb.movimientoPermitido(finalPosX, finalPosY, false)) { int pos = this.buscarPosicion(treb, part); ct.actualizarTrebejos(finalPosX, finalPosY, treb); treb.setPosX(finalPosX); treb.setPosY(finalPosY); part.getFichas().set(pos, treb); part.setTurno(!part.getTurno()); cp.actualizarPartida(part.getBlanco().getDni(), part.getNegro().getDni(), part.getTurno()); return 3; } else return 4; } else return 0; }