public void getMovimientosPermitidosEnJaque(Tablero tablero, Jugador jugador) { bool coincide = false; if (jugador.PiezaJaque is Caballo) { celdasDisponibles.Clear(); } else { foreach (Celda c in celdasDisponibles) { coincide = false; jugador.PiezaJaque.getCeldasDestino(tablero, tablero.getCelda(jugador.PiezaJaque)); foreach (Celda celDisp in jugador.PiezaJaque.celdasDispJaqueRey) { if (c.Equals(celDisp)) { coincide = true; } } if (!coincide && tablero.getCelda(jugador.PiezaJaque) != c) { celdasDisponibles.Remove(c); } } } }
public List <Celda> PosiblesDestinos(Tablero tablero, Celda celdaActual, int incrementoVertical, int incrementoHorizontal) { List <Celda> cDisp = new List <Celda>(); bool piezaOFinalTableroEncontrado = false; int horizontal = incrementoHorizontal; int vertical = incrementoVertical; Celda celdaDestino = null; while (!piezaOFinalTableroEncontrado) { Movimiento movimiento = new Movimiento(); movimiento.Horizontal = horizontal; movimiento.Vertical = vertical; celdaDestino = tablero.getCelda(celdaActual, movimiento); if (tablero.VerificarCeldaDisponible(celdaDestino, color)) { cDisp.Add(celdaDestino); celdasDisponibles.Add(celdaDestino); } piezaOFinalTableroEncontrado = (celdaDestino == null || celdaDestino.Pieza != null); horizontal += incrementoHorizontal; vertical += incrementoVertical; } //Verifica solo las celdas disponibles que apuntan al Rey contrario if (celdaDestino.Pieza != null && celdaDestino.Pieza is Rey && celdaDestino.Pieza.Color != this.color) { celdasDispJaqueRey = cDisp; } return(cDisp); }
public Celda VerificarSiPuedeEnrocar(Tablero tablero) { Celda c = tablero.getCelda(this); Movimiento movimientoTorre = (from Movimiento mt in tablero.Partida.Movimientos where mt.Pieza == c.Pieza select mt).FirstOrDefault(); Movimiento movimiento = new Movimiento(); movimiento.Horizontal = 0; movimiento.Vertical = -1; bool startPosition = false; if (tablero.getCelda(c, movimiento) == null && movimientoTorre == null) { startPosition = true; } if (startPosition) { movimiento.Vertical = 0; movimiento.Horizontal = 2; Celda cel = tablero.getCelda(c, movimiento); if (cel != null) { if (cel.Pieza != null && cel.Pieza is Rey && cel.Pieza.Color == this.color) { movimiento.Horizontal = 3; cel = tablero.getCelda(c, movimiento); if (cel.Pieza != null) { return(cel); } } } else { movimiento.Vertical = 0; movimiento.Horizontal = -1; cel = tablero.getCelda(c, movimiento); if (cel.Pieza != null && cel.Pieza is Rey && cel.Pieza.Color == this.color) { movimiento.Horizontal = -2; cel = tablero.getCelda(c, movimiento); if (cel.Pieza != null) { return(cel); } } } } return(null); }
public List <Celda> PosiblesDestinos(Tablero tablero, Celda celdaActual, List <Movimiento> movimientos) { List <Celda> cDisp = new List <Celda>(); foreach (Movimiento movimiento in movimientos) { Celda celdaDestino = tablero.getCelda(celdaActual, movimiento); if (tablero.VerificarCeldaDisponible(celdaDestino, color)) { cDisp.Add(celdaDestino); celdasDisponibles.Add(celdaDestino); } //Verifica solo las celdas disponibles que apuntan al Rey contrario if (celdaDestino.Pieza != null && celdaDestino.Pieza is Rey && celdaDestino.Pieza.Color != this.color) { celdasDispJaqueRey.Add(celdaDestino); } } return(cDisp); }
public override List <Celda> getCeldasDestino(Tablero tablero, Celda celdaActual) { Movimiento movimiento = new Movimiento(); movimiento.Horizontal = 0; movimiento.Vertical = -2; bool startPosition = false; if (tablero.getCelda(celdaActual, movimiento) == null) { startPosition = true; } movimiento.Horizontal = 0; movimiento.Vertical = 1; Celda celdaDestino = tablero.getCelda(celdaActual, movimiento); if (celdaDestino != null && celdaDestino.Pieza == null) { celdasDisponibles.Add(celdaDestino); if (startPosition) { movimiento.Horizontal = 0; movimiento.Vertical = 2; celdaDestino = tablero.getCelda(celdaActual, movimiento); if (celdaDestino != null && celdaDestino.Pieza == null) { celdasDisponibles.Add(celdaDestino); } } } movimiento.Horizontal = -1; movimiento.Vertical = 1; celdaDestino = tablero.getCelda(celdaActual, movimiento); if (celdaDestino != null && celdaDestino.Pieza != null && celdaDestino.Pieza.Color != color) { celdasDisponibles.Add(celdaDestino); } Celda celdaHayPeonContrario = null; //Peon al paso if ((this.PosicionInicial.Equals("ARRIBA") && celdaActual.Fila == 4) || (this.PosicionInicial.Equals("ABAJO") && celdaActual.Fila == 5)) { movimiento.Horizontal = -1; movimiento.Vertical = 0; celdaHayPeonContrario = tablero.getCelda(celdaActual, movimiento); } if (celdaHayPeonContrario != null && celdaHayPeonContrario.Pieza != null && celdaHayPeonContrario.Pieza is Peon && celdaHayPeonContrario.Pieza.Color != this.color) { celdasDisponibles.Add(celdaDestino); } movimiento.Horizontal = 1; movimiento.Vertical = 1; celdaDestino = tablero.getCelda(celdaActual, movimiento); if (celdaDestino != null && celdaDestino.Pieza != null && celdaDestino.Pieza.Color != color) { celdasDisponibles.Add(celdaDestino); } if ((this.PosicionInicial.Equals("ARRIBA") && celdaActual.Fila == 4) || (this.PosicionInicial.Equals("ABAJO") && celdaActual.Fila == 5)) { movimiento.Horizontal = 1; movimiento.Vertical = 0; celdaHayPeonContrario = tablero.getCelda(celdaActual, movimiento); } if (celdaHayPeonContrario != null && celdaHayPeonContrario.Pieza != null && celdaHayPeonContrario.Pieza is Peon && celdaHayPeonContrario.Pieza.Color != this.color) { celdasDisponibles.Add(celdaDestino); } return(celdasDisponibles); }