随机函数实现抽奖(2)

来源:互联网 发布:淘宝设计素材网 编辑:程序博客网 时间:2024/05/09 20:03

我们在上一篇里面已经实现了随机产生抽奖号码,为了能实现用户点击停止时,先出现用户指定的号码,所以我们必须先读取推荐号码列表中的数据。

int i = 0;

             foreach (Control a in this.Controls)

             {    

Random ran = new Random();

if (a is Label)

                 {

                     if (tuijian - index >= 1)

                     {

                         i = ran.Next(0, _ary.Count);

                         a.Text = _ary[index].ToString();

                     }

                     else

                     {

                         i = ran.Next(0, _thAry.Count);

                         a.Text = _thAry[i].ToString();

                         _thAry.Remove(_thAry[i]);

                     }

                     _remmend.Add(a.Text);

                     Console.WriteLine(a.Text);

                     index++;

                 }

             }

   在这里,大家注意,由于推荐号码是固定名次的,所以我们不删除已经抽出的号码。只是一一显示。它不可能产生重复。如果推荐号码已经抽完,这个时候,我们就要真正实现公平的抽奖。产生的随机数作为非推荐号码列表的索引,每抽出一个号码并且把它删除。这样的话就永远不会有重复的号码。但是我们做到这里发现一个情况。把推荐号码抽出后,其他的号码好像有一定的规律。这个时候,为了使它更随机,我们应该把在foreach之前只实例化一个random.

   好了,现在基本的功能已经完成。我测试了一下。发现点开始后10个标签的号码变化不快,人能用眼睛看出来。这样的效果准是不行的。难道是时钟的原因吗?这个时候我把时钟改为1毫秒跑一次。发现还是同样的现象。想了很久都想不明白。算法应该是没错的,为什么效果是这样呢?最后我发现,原来是窗体背景的原因,由于图片太大。Windows来不及描绘。所以导致刷新得不快。将窗体背景去掉,一切符合需要,已经看不清数字,这才像一个随机快速变换的抽奖系统了!