protected virtual bool PuedeMoverse(Casilla casillaDestino) { if (casillaDestino == null) { return(false); } return(casillaDestino.Pieza == null || casillaDestino.Pieza.Color != Color); }
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); }
/// <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); }
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); }