给定开始,结束和增量值,我想要一个向上和向下计数的算法

max*_*max 2 c c++ algorithm

好的,我有一个想要淡入淡出的控件(持续).为了淡化它,我在绘图程序中调整控件的透明度值.所以我设置了一个运行的计时器,我调整了m_transparency成员.计时器运行,它应该在两个定义的值m_start,m_end之间来回扫描.这些可以是0-255.

例如.开始30,结束55,增量值= 5.它看起来像:

30,35,40,45,55,50,45,40,35,30,35,40 .......

也应该处理开始55,结束30.

无论如何,我写了一个可怕的功能,基本上测试每个条件(我上下移动,我到达开始,结束,转身点等).它很难看,我很尴尬(三重嵌套ifs),但我无法想出一个更干净的方法,然后测试一切.有没有更简单的方法?

Mar*_*tin 5

以下课程相当简单.你需要考虑你希望它在边界情况下的行为(例如,这将为RangeScanner(30,54,5)发出55,但很容易将其更改为你想要的行为).

class RangeScanner
{
public:
    RangeScanner(int start, int end, unsigned int inc) :
        value(start),
        lower(std::min(start, end)),
        upper(std::max(start, end)),
        increment(inc),
        incrementing(start < end)
    {
    }

    int nextValue()
    {
        int ret = value;

        value += incrementing ? increment : -increment;

        if (value >= upper || value <= lower)
        {
            incrementing = !incrementing;
        }

        return ret;
    }

private:
    int value;
    const int lower;
    const int upper;
    const unsigned int increment;
    bool incrementing;
};