public List <Movimiento> VerificarAmenaza(Rey pieza, List <Movimiento> movimientos) { Celda celdaActual = this.getCelda(pieza); Celda celdaAMover = null; foreach (Movimiento mov in movimientos) { foreach (Pieza p in piezas) { if (p.Color != pieza.Color && pieza.Activa == true) { celdaAMover = this.getCelda(celdaActual, mov); foreach (Celda celdaDisp in p.getCeldasDestino(this, this.getCelda(p))) { if (celdaAMover.Equals(celdaDisp)) { if (movimientos.Contains(mov)) { movimientos.Remove(mov); } } } } } } return(movimientos); }
public List <Movimiento> VerificarEnroque(Rey pieza, List <Movimiento> movimientos) { Celda celdaAMover = null; Celda celdaActual = this.getCelda(pieza); Movimiento mov1 = movimientos.Where(m => m.Vertical == 0 && m.Horizontal == 2).FirstOrDefault(); Movimiento mov2 = movimientos.Where(m => m.Vertical == 0 && m.Horizontal == -2).FirstOrDefault(); Movimiento movimientoRey = (from Movimiento m in partida.Movimientos where m.Pieza == pieza select m).FirstOrDefault(); Movimiento mov = new Movimiento(); mov.Vertical = 0; mov.Horizontal = -4; movimientos = this.VerificarMovimiento(celdaActual, mov, movimientoRey, movimientos, mov2); mov.Vertical = 0; mov.Horizontal = 3; movimientos = this.VerificarMovimiento(celdaActual, mov, movimientoRey, movimientos, mov1); //Verifica que no haya piezas de por medio if (movimientos.Contains(mov1) || movimientos.Contains(mov2)) { bool removerMov1 = false; bool removerMov2 = false; for (int i = 0; i < 2; i++) { mov.Vertical = 0; mov.Horizontal = 1; if (celdaAMover == null) { celdaAMover = this.getCelda(celdaActual, mov); } else { celdaAMover = this.getCelda(celdaAMover, mov); } if (!this.VerificarCeldaDisponible(celdaAMover)) { removerMov1 = true; } } for (int i = 0; i < 3; i++) { mov.Vertical = 0; mov.Horizontal = -1; if (celdaAMover == null) { celdaAMover = this.getCelda(celdaActual, mov); } else { celdaAMover = this.getCelda(celdaAMover, mov); } if (!this.VerificarCeldaDisponible(celdaAMover)) { removerMov2 = true; } } if (removerMov1) { movimientos.Remove(mov1); } if (removerMov2) { movimientos.Remove(mov2); } } //Verificar si ya realizo un movimiento if (movimientos.Contains(mov1) || movimientos.Contains(mov2)) { foreach (Pieza p in piezas) { if (p.Color != pieza.Color && pieza.Activa == true) { Celda celda = this.getCelda(p); //Verifica si el rey esta en jaque actualmente foreach (Celda celdaDisp in p.getCeldasDestino(this, celda)) { if (celdaActual.Equals(celdaDisp)) { movimientos.Remove(mov1); movimientos.Remove(mov2); } } //Verifica si el rey esta amenazado al moverse for (int i = 0; i < 2; i++) { Movimiento movimientoARealizar = new Movimiento(); movimientoARealizar.Vertical = 0; movimientoARealizar.Horizontal = 1; if (celdaAMover == null) { celdaAMover = this.getCelda(celdaActual, movimientoARealizar); } else { celdaAMover = this.getCelda(celdaAMover, movimientoARealizar); } foreach (Celda celdaDisp in p.getCeldasDestino(this, celda)) { if (celdaAMover.Equals(celdaDisp)) { movimientos.Remove(mov1); } } } celdaAMover = null; for (int i = 0; i < 2; i++) { Movimiento movimientoARealizar = new Movimiento(); movimientoARealizar.Vertical = 0; movimientoARealizar.Horizontal = -1; if (celdaAMover == null) { celdaAMover = this.getCelda(celdaActual, movimientoARealizar); } else { celdaAMover = this.getCelda(celdaAMover, movimientoARealizar); } foreach (Celda celdaDisp in p.getCeldasDestino(this, celda)) { if (celdaAMover.Equals(celdaDisp)) { movimientos.Remove(mov2); } } } } } } return(movimientos); }