Example #1
0
        public override bool Mover(int posY, int posX, List <Pieza> listadoPiezas)
        {
            //Logica movimiento torre

            var ultimoMovimientoPiezaMover = this.Movimientos.OrderByDescending(x => x.Tiempo).FirstOrDefault();
            var result = false;


            if (posY == ultimoMovimientoPiezaMover.PosY)
            {
                var casillerosAnalizar = Math.Abs(posX - ultimoMovimientoPiezaMover.PosX);
                if (posX > ultimoMovimientoPiezaMover.PosX)
                {
                    //Sumar Casilleros
                    for (int i = 1; i <= casillerosAnalizar; i++)
                    {
                        var piezaAComer = Tablero.HayPieza(posY, ultimoMovimientoPiezaMover.PosX + i, listadoPiezas);

                        if (piezaAComer != null)
                        {
                            if (piezaAComer.Id == this.Id)
                            {
                                continue;
                            }
                            if (piezaAComer.Color == this.Color)
                            {
                                return(false);
                            }

                            if (i == casillerosAnalizar)
                            {
                                if (piezaAComer.Color != this.Color)
                                {
                                    Pieza.Comer(piezaAComer, listadoPiezas);
                                }
                            }
                        }
                    }
                    result = true;
                }
                else
                {
                    //Restar Casilleros
                    for (int i = 1; i <= casillerosAnalizar; i++)
                    {
                        var piezaAComer = Tablero.HayPieza(posY, ultimoMovimientoPiezaMover.PosX - i, listadoPiezas);

                        if (piezaAComer != null)
                        {
                            if (piezaAComer.Id == this.Id)
                            {
                                continue;
                            }
                            if (piezaAComer.Color == this.Color)
                            {
                                return(false);
                            }

                            if (i == casillerosAnalizar)
                            {
                                if (piezaAComer.Color != this.Color)
                                {
                                    Pieza.Comer(piezaAComer, listadoPiezas);
                                }
                            }
                        }
                    }
                    result = true;
                }
            }
            if (posX == ultimoMovimientoPiezaMover.PosX)
            {
                var casillerosAnalizar = Math.Abs(posY - ultimoMovimientoPiezaMover.PosY);
                if (posY > ultimoMovimientoPiezaMover.PosY)
                {
                    //Sumar Casilleros
                    for (int i = 1; i <= casillerosAnalizar; i++)
                    {
                        var piezaAComer = Tablero.HayPieza(ultimoMovimientoPiezaMover.PosY + i, posX, listadoPiezas);

                        if (piezaAComer != null)
                        {
                            if (piezaAComer.Id == this.Id)
                            {
                                continue;
                            }
                            if (piezaAComer.Color == this.Color)
                            {
                                return(false);
                            }

                            if (i == casillerosAnalizar)
                            {
                                if (piezaAComer.Color != this.Color)
                                {
                                    Pieza.Comer(piezaAComer, listadoPiezas);
                                }
                            }
                        }
                    }
                    result = true;
                }
                else
                {
                    //Restar Casilleros
                    for (int i = 1; i <= casillerosAnalizar; i++)
                    {
                        var piezaAComer = Tablero.HayPieza(ultimoMovimientoPiezaMover.PosY - i, posX, listadoPiezas);

                        if (piezaAComer != null)
                        {
                            if (piezaAComer.Id == this.Id)
                            {
                                continue;
                            }
                            if (piezaAComer.Color == this.Color)
                            {
                                return(false);
                            }

                            if (i == casillerosAnalizar)
                            {
                                if (piezaAComer.Color != this.Color)
                                {
                                    Pieza.Comer(piezaAComer, listadoPiezas);
                                }
                            }
                        }
                    }
                    result = true;
                }
            }

            return(result);
        }
Example #2
0
        public override bool Mover(int posY, int posX, List <Pieza> listadoPiezas)
        {
            var ultimoMovimientoPiezaMover = this.Movimientos.OrderByDescending(x => x.Tiempo).FirstOrDefault();

            //Logica movimiento Alfil
            var result = false;


            //Posiciones validas ↓-→
            for (int j = 1; j < 8; j++)
            {
                var posNuevaY = ultimoMovimientoPiezaMover.PosY + j;
                var posNuevaX = ultimoMovimientoPiezaMover.PosX + j;

                if (posNuevaY == posY && posNuevaX == posX)
                {
                    //Movimiento Abajo - Derecha
                    var casillerosAnalizarX = Math.Abs(posNuevaX - ultimoMovimientoPiezaMover.PosX);
                    var casillerosAnalizarY = Math.Abs(posNuevaY - ultimoMovimientoPiezaMover.PosY);

                    for (int i = 1; i <= casillerosAnalizarX; i++)
                    {
                        var hayPieza = Tablero.HayPieza(ultimoMovimientoPiezaMover.PosY + i, ultimoMovimientoPiezaMover.PosX + i, listadoPiezas);

                        if (hayPieza != null)
                        {
                            if (hayPieza.Id == this.Id)
                            {
                                continue;
                            }
                            if (hayPieza.Color == this.Color)
                            {
                                return(false);
                            }
                            if (i == casillerosAnalizarX)
                            {
                                if (hayPieza.Color != this.Color)
                                {
                                    Pieza.Comer(hayPieza, listadoPiezas);
                                }
                            }
                        }
                    }
                    result = true;
                }
            }
            //Posiciones validas ←-↑
            for (int j = 1; j < 8; j++)
            {
                var posNuevaY = ultimoMovimientoPiezaMover.PosY - j;
                var posNuevaX = ultimoMovimientoPiezaMover.PosX - j;

                if (posNuevaY == posY && posNuevaX == posX)
                {
                    //Movimiento Abajo - Derecha
                    var casillerosAnalizar = Math.Abs(posNuevaX - ultimoMovimientoPiezaMover.PosX);

                    for (int i = 1; i <= casillerosAnalizar; i++)
                    {
                        var hayPieza = Tablero.HayPieza(casillerosAnalizar + i, casillerosAnalizar + i, listadoPiezas);

                        if (hayPieza != null)
                        {
                            if (hayPieza.Id == this.Id)
                            {
                                continue;
                            }
                            if (hayPieza.Color == this.Color)
                            {
                                return(false);
                            }
                            if (i == casillerosAnalizar)
                            {
                                if (hayPieza.Color != this.Color)
                                {
                                    Pieza.Comer(hayPieza, listadoPiezas);
                                }
                            }
                        }
                    }
                    result = true;
                }
            }
            //Posiciones validas ↓-←
            for (int j = 1; j < 8; j++)
            {
                var posNuevaY = ultimoMovimientoPiezaMover.PosY + j;
                var posNuevaX = ultimoMovimientoPiezaMover.PosX - j;

                if (posNuevaY == posY && posNuevaX == posX)
                {
                    //Movimiento Abajo - Derecha
                    var casillerosAnalizar = Math.Abs(posNuevaX - ultimoMovimientoPiezaMover.PosX);

                    for (int i = 1; i <= casillerosAnalizar; i++)
                    {
                        var hayPieza = Tablero.HayPieza(casillerosAnalizar + i, casillerosAnalizar - i, listadoPiezas);

                        if (hayPieza != null)
                        {
                            if (hayPieza.Id == this.Id)
                            {
                                continue;
                            }
                            if (hayPieza.Color == this.Color)
                            {
                                return(false);
                            }
                            if (i == casillerosAnalizar)
                            {
                                if (hayPieza.Color != this.Color)
                                {
                                    Pieza.Comer(hayPieza, listadoPiezas);
                                }
                            }
                        }
                    }
                    result = true;
                }
            }
            //Posiciones validas ↑-→
            for (int j = 1; j < 8; j++)
            {
                var posNuevaY = ultimoMovimientoPiezaMover.PosY - j;
                var posNuevaX = ultimoMovimientoPiezaMover.PosX + j;

                if (posNuevaY == posY && posNuevaX == posX)
                {
                    //Movimiento Abajo - Derecha
                    var casillerosAnalizar = Math.Abs(posNuevaX - ultimoMovimientoPiezaMover.PosX);

                    for (int i = 1; i <= casillerosAnalizar; i++)
                    {
                        var hayPieza = Tablero.HayPieza(casillerosAnalizar - i, casillerosAnalizar + i, listadoPiezas);

                        if (hayPieza != null)
                        {
                            if (hayPieza.Id == this.Id)
                            {
                                continue;
                            }
                            if (hayPieza.Color == this.Color)
                            {
                                return(false);
                            }
                            if (i == casillerosAnalizar)
                            {
                                if (hayPieza.Color != this.Color)
                                {
                                    Pieza.Comer(hayPieza, listadoPiezas);
                                }
                            }
                        }
                    }
                    result = true;
                }
            }


            return(result);
        }