예제 #1
0
        protected virtual bool PuedeMoverse(Casilla casillaDestino)
        {
            if (casillaDestino == null)
            {
                return(false);
            }

            return(casillaDestino.Pieza == null || casillaDestino.Pieza.Color != Color);
        }
예제 #2
0
        protected IEnumerable <Casilla> CasillasDestinoParaMoverse(IEnumerable <Movimiento> movimientos)
        {
            Tablero        tablero  = CasillaTablero.Cuadricula;
            List <Casilla> casillas = new List <Casilla>();

            foreach (Movimiento movimiento in movimientos)
            {
                Casilla destino = tablero.GetCasilla(CasillaTablero, movimiento);
                if (PuedeMoverse(destino))
                {
                    casillas.Add(destino);
                }
            }
            return(casillas);
        }
예제 #3
0
        /// <summary>
        /// Devuelve las celdas a las que puede moverse la pieza
        /// </summary>
        /// <returns>Lista de celdas</returns>
        public override IEnumerable <Casilla> ObtenerCasillaDestino()
        {
            if (CasillaTablero == null)
            {
                return(null);
            }

            Tablero tablero           = CasillaTablero.Cuadricula;
            bool    isInStartPosition = (tablero.GetCasilla(CasillaTablero, new Movimiento {
                Adelante = -2, Derecha = 0
            }) == null);

            List <Casilla> posibleSquares    = new List <Casilla>();
            Casilla        destinationSquare = tablero.GetCasilla(CasillaTablero, new Movimiento {
                Adelante = 1, Derecha = 0
            });

            if (destinationSquare != null && destinationSquare.Pieza == null)
            {
                posibleSquares.Add(destinationSquare);
                if (isInStartPosition)
                {
                    destinationSquare = tablero.GetCasilla(CasillaTablero, new Movimiento {
                        Adelante = 2, Derecha = 0
                    });
                    if (destinationSquare != null && destinationSquare.Pieza == null)
                    {
                        posibleSquares.Add(destinationSquare);
                    }
                }
            }
            destinationSquare = tablero.GetCasilla(CasillaTablero, new Movimiento {
                Adelante = 1, Derecha = -1
            });
            if (destinationSquare != null && destinationSquare.Pieza != null && destinationSquare.Pieza.Color != Color)
            {
                posibleSquares.Add(destinationSquare);
            }
            destinationSquare = tablero.GetCasilla(CasillaTablero, new Movimiento {
                Adelante = 1, Derecha = 1
            });
            if (destinationSquare != null && destinationSquare.Pieza != null && destinationSquare.Pieza.Color != Color)
            {
                posibleSquares.Add(destinationSquare);
            }

            return(posibleSquares);
        }
예제 #4
0
        protected IEnumerable <Casilla> DireccionCasillaDestino(int incrementoAdelante, int incrementoDerecha)
        {
            Tablero cuadricula = CasillaTablero.Cuadricula;

            List <Casilla> casillas    = new List <Casilla>();
            int            adelante    = incrementoAdelante;
            int            derecha     = incrementoDerecha;
            bool           piezaOBorde = false;

            while (!piezaOBorde)
            {
                Casilla destino = cuadricula.GetCasilla(CasillaTablero, new Movimiento {
                    Adelante = adelante, Derecha = derecha
                });
                if (PuedeMoverse(destino))
                {
                    casillas.Add(destino);
                }
                piezaOBorde = (destino == null || destino.Pieza == null);
                adelante   += incrementoAdelante;
                derecha    += incrementoDerecha;
            }
            return(casillas);
        }