示例#1
0
        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);
        }
示例#2
0
        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);
                        }
                    }
                }
            }
        }
示例#3
0
        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);
        }
示例#4
0
 public override List <Celda> getCeldasDestino(Tablero tablero, Celda celdaActual)
 {
     return(base.PosiblesDestinos(tablero, celdaActual, movimientos));
 }
示例#5
0
 public bool Mover(Tablero tablero, Celda celdaActual, Celda celdaDestino, Jugador jugador)
 {
     return(tablero.ModificarPosicionPieza(celdaActual, celdaDestino, jugador));
 }
示例#6
0
 public abstract List <Celda> getCeldasDestino(Tablero tablero, Celda celdaActual);
示例#7
0
文件: Peon.cs 项目: eceluci09/ajedrez
        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);
        }
示例#8
0
 public void AceptarTablas(Tablero tablero)
 {
     tablero.FinalizarPorTablas();
 }
示例#9
0
 public void SeleccionarPiezaCorona(Tablero tablero, Pieza pieza, Celda destino)
 {
     tablero.IntercambiarPieza(pieza, destino, this);
 }