private List <Movimiento> VerificarMovimiento(Celda celdaActual, Movimiento mov, Movimiento movimientoRey, List <Movimiento> movimientos, Movimiento movAEliminar) { Celda c = this.getCelda(celdaActual, mov); Movimiento movimientoTorre = (from Movimiento mt in partida.Movimientos where mt.Pieza == c.Pieza select mt).FirstOrDefault(); if (movimientoRey != null || movimientoTorre != null) { movimientos.Remove(movAEliminar); } return(movimientos); }
public Celda getCelda(Celda celdaActual, Movimiento movimiento) { Pieza pieza = celdaActual.Pieza; if (pieza == null) { return(null); } int horizontal = celdaActual.Columna + movimiento.Horizontal; int vertical = (pieza.PosicionInicial.Equals(ARRIBA) ? celdaActual.Fila - movimiento.Vertical : celdaActual.Fila + movimiento.Vertical); Celda celda = (from Celda cel in celdas where cel.Columna == horizontal && cel.Fila == vertical select cel).FirstOrDefault(); return(celda); }
public override List <Celda> getCeldasDestino(Tablero tablero, Celda celdaActual) { Celda celda = this.VerificarSiPuedeEnrocar(tablero); if (celda != null) { celdasDisponibles.Add(celda); } else { celdasDisponibles.AddRange(base.PosiblesDestinos(tablero, celdaActual, 0, -1)); celdasDisponibles.AddRange(base.PosiblesDestinos(tablero, celdaActual, 0, 1)); celdasDisponibles.AddRange(base.PosiblesDestinos(tablero, celdaActual, 1, 0)); celdasDisponibles.AddRange(base.PosiblesDestinos(tablero, celdaActual, -1, 0)); } return(celdasDisponibles); }
public void Mover(Pieza pieza, Tablero tablero, Celda celdaActual, Celda celdaDestino) { Pieza existePieza = (from Pieza p in piezas where p == pieza select p).FirstOrDefault(); if (existePieza != null) { piezaJaque = null; if (pieza.Mover(tablero, celdaActual, celdaDestino, this)) { bool caballoElegido = false; bool alfilElegido = false; bool torreElegida = false; bool damaElegida = false; //Saco los peones y el rey como piezas coronadoras foreach (Pieza piezaCorona in piezas) { if (piezaCorona is Caballo && !caballoElegido) { caballoElegido = true; piezasCoronacion.Add(piezaCorona); } if (piezaCorona is Alfil && !alfilElegido) { alfilElegido = true; piezasCoronacion.Add(piezaCorona); } if (piezaCorona is Torre && !torreElegida) { torreElegida = true; piezasCoronacion.Add(piezaCorona); } if (piezaCorona is Reina && !damaElegida) { damaElegida = true; piezasCoronacion.Add(piezaCorona); } } } } }
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) { return(base.PosiblesDestinos(tablero, celdaActual, movimientos)); }
public bool Mover(Tablero tablero, Celda celdaActual, Celda celdaDestino, Jugador jugador) { return(tablero.ModificarPosicionPieza(celdaActual, celdaDestino, jugador)); }
public abstract List <Celda> getCeldasDestino(Tablero tablero, Celda celdaActual);
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); }
public bool ModificarPosicionPieza(Celda actual, Celda destino, Jugador jug) { bool coronacion = false; Pieza pieza = actual.Pieza; actual.Pieza = null; Jugador jugadorRival = null; Pieza piezaComida = null; if (destino.Pieza != null) { if (jug.Equals(partida.Jugador1)) { piezaComida = (from Pieza p in partida.Jugador2.Piezas where p.Equals(destino.Pieza) select p).FirstOrDefault(); jugadorRival = partida.Jugador2; } else { piezaComida = (from Pieza p in partida.Jugador1.Piezas where p.Equals(destino.Pieza) select p).FirstOrDefault(); jugadorRival = partida.Jugador1; } piezaComida.Activa = false; piezaComida = (from Pieza p in piezas where p.Equals(piezaComida) select p).FirstOrDefault(); piezaComida.Activa = false; } //Verifica si el peon comio con el peon al paso if (pieza is Peon) { Movimiento mov = new Movimiento(); mov.Horizontal = 0; mov.Vertical = -1; Celda celdaAnterior = this.getCelda(actual, mov); if (celdaAnterior.Pieza != null && celdaAnterior.Pieza is Peon && celdaAnterior.Pieza.Color != pieza.Color) { piezaComida = (from Pieza p in piezas where p.Equals(celdaAnterior.Pieza) select p).FirstOrDefault(); piezaComida.Activa = false; } coronacion = this.VerificarCoronacion((Peon)pieza, destino); } destino.Pieza = pieza; partida.RegistrarMovimiento(actual, destino); this.VerificarMovimiento(actual, destino, pieza, jug); string tipo = (!coronacion) ? this.verificarJaqueOJaqueMate(jug, pieza) : string.Empty; if (tipo.Equals("JAQUE")) { jugadorRival.PiezaJaque = pieza; } partida.ChequearGanador(tipo, jug); return(coronacion); }
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); }
public void SeleccionarPiezaCorona(Tablero tablero, Pieza pieza, Celda destino) { tablero.IntercambiarPieza(pieza, destino, this); }