应游戏朋友要求做了个抽奖程序,还是拿C#做的,$MS大法好 :)

qq截图20150419005516.jpg - 大小: 177.67 KB - 尺寸: 960 x 640 - 点击打开新窗口浏览全图

游戏可以设定抽奖类型和跑马灯效果,做这个跑马灯效果的时候,还是很有趣的。

一般抽奖中,会用到类似于转盘的效果,最后停在某个地方,因为转盘是原型的,我们可以根据角度来判断精确到哪个区域,所以我采取了步进carry的方式,来处理方块类似于圆盘区域的显示。下面是跑马灯的状态:

跑马灯静止 -> 加速 -> 匀速 -> 递减 -> 静止

其实区别就在于,减速的过程中表面看起来像是在减速一样,其实方向还是向前的。跑马灯的Tick代码如下:

 if (_speed == 0) _speed = startSpeed;

            //进入加速
            if (_speedStatus == "acceler")
            {
                //当速度小于一个阶段的时候,加速
                if (_speed < stopAccelerSpeed)
                    _speed += accelerationStep;
                else
                    _speedStatus = "avg";
            }

            //进入匀速
            if (_speedStatus == "avg")
            {
                if (_avgSpeedTime < avgSpeedTime)
                    _avgSpeedTime += changeInterval;
                else
                    _speedStatus = "deacceler";
            }

            //进入递减
            if (_speedStatus == "deacceler")
            {
                runTimer.Interval += changeInterval / 2;

                //即刻速度最低不能小于开始速度
                if (_speed < startSpeed)
                    _speed = startSpeed;
                else
                    _speed -= deaccelerationStep;
            }

            _distance += _speed;
            _acturePB = (int)Math.Ceiling(Convert.ToDouble(_distance / perPBWidth));
            curPB = _acturePB % globalBPCount;
            //做一些逻辑处理
            if (_speed == startSpeed)
            {
                //停止并显示抽奖结果
            } 

代码中我设计了3个状态:acceler、avg、deacceler分别代表了加速、匀速、递减加速状态。而逻辑过程如下:

1、假设一个BOX的长度是64,初始速度16 Tick开始,设置初始速度,进入加速状态
2、当加速,速度达到设定的最大值,然后进入匀速模式
3、匀速模式下加速的时间,可以随机生成不建议太大(用户等太久)、也不建议太小(跑马灯效果不明显)
4、匀速时间到,进入减速状态,此时我用了增加Interval+小幅减速来处理的,让跑马灯看起来更流畅,否则会出现生硬的骤然停止

5、速度减小到小于初始速度,则停止,显示抽奖结果