public FilterMoveableWithBoardStrategyPattern(Tile from, MOVEDIRECTIONTYPE moveDirectionType, Tile[,] boardTiles, int movementAmount)
    {
        IFiltterMoveableTileWithBoardStrategy moveStratToUse = null;

        switch (moveDirectionType)
        {
        case MOVEDIRECTIONTYPE.CROSSLEFT:
        case MOVEDIRECTIONTYPE.CROSSRIGHT:
            moveStratToUse = new FilterMoveableCrossFrontWithBoard();
            break;

        case MOVEDIRECTIONTYPE.DIAGONAL:
            moveStratToUse = new FilterMoveableDiagonalWithBoard();
            break;

        case MOVEDIRECTIONTYPE.MULTI:
            moveStratToUse = new FilterMoveableAllDirectionWithBoard();
            break;
        }

        if (moveStratToUse == null)
        {
            moveableTiles = null;
            return;
        }

        ContextMoveableWithBoardFilter ctxMoveable = new ContextMoveableWithBoardFilter(moveStratToUse);

        moveableTiles = ctxMoveable.ExecuteStrategy(from, moveDirectionType, boardTiles, movementAmount);
    }
 public ContextMoveableWithBoardFilter(IFiltterMoveableTileWithBoardStrategy strategy)
 {
     this.strategy = strategy;
 }