Beispiel #1
0
        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);
                    }
                }
            }
        }
Beispiel #2
0
        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);
        }
Beispiel #3
0
        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);
        }
Beispiel #4
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);
        }
Beispiel #5
0
        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);
        }