当前位置:编程学习 > VB >>

想用VB做一个抽奖程序,用手机号抽奖,滚动各个数字~~大侠帮忙呀!

手机号中的各个数字都是滚动的,能配背景音乐,不知道哪位大侠能帮帮忙不~~~

或者有其他的方案也行,,谢谢啦。。。 --------------------编程问答-------------------- 这个简单啊
随机的整就行了 --------------------编程问答-------------------- 补充:这一串手机号是放在文本文件中的,每次启动时从文本文件中读取手机号 --------------------编程问答-------------------- 不过又是增加一个文件读取和数据分析而已…… --------------------编程问答--------------------
其实,抽奖算法就是随机数的应用,瞬间完成。

你在电视上看到滚动的那个,只是视觉噱头。你用 Timer 就可以实现这样的功能。
--------------------编程问答-------------------- --------------------编程问答-------------------- 随机取数 --------------------编程问答-------------------- 很厉害!不错呀!可是这会重复啊!怎么才能做到不重复出现呢?
引用 5 楼  的回复:
4 个控件。

Combo1 : Style = 1-Simple Combo,设置此属性后不要拉开,使之看起来像 TextBox
Command1: 启动滚屏
Command2: 停止滚屏
Timer :

Private Sub Command1_Click()
  Timer1.Enabled = True
End Sub

Private Sub Command2_C……
--------------------编程问答-------------------- 呵,我是不是有点笨哦,, --------------------编程问答-------------------- --------------------编程问答-------------------- 我的备选手机号为130个左右,
Loop Until i <> Combo1.ListIndex And i < Combo1.ListCount And Combo1.ItemData(i) = 0

这条语句会出现“无效属性数组索引”错误
怎么回事呢?
引用 9 楼  的回复:
不重复的:(你的备选手机号要足够多)

Private Sub Timer1_Timer()
  Dim i As Integer
   
  Do
  i = Rnd * Combo1.ListCount
  Loop Until i <> Combo1.ListIndex And i < Combo1.ListCount And Combo1.ItemData(i) = 0
 ……
--------------------编程问答-------------------- 有人回复不??? --------------------编程问答-------------------- 试试:

Do
Do
  i = Rnd * Combo1.ListCount
Loop Until i < Combo1.ListCount 
Loop Until i <> Combo1.ListIndex And Combo1.ItemData(i) = 0

Combo1.ListIndex = i
Combo1.ItemData(i) = 1
--------------------编程问答--------------------
引用 12 楼  的回复:
试试:

Do
Do
  i = Rnd * Combo1.ListCount
Loop Until i < Combo1.ListCount 
Loop Until i <> Combo1.ListIndex And Combo1.ItemData(i) = 0

Combo1.ListIndex = i
Combo1.ItemData(i) = 1
死循环哦,,%>_<%~~ --------------------编程问答-------------------- 是啊,都显示过了,就死循环了。所以说,你的手机号必须足够多。

1 秒种滚动 20 个,你那 130 个手机号也就滚 6.5 秒。

实际上,外层判断也不必检查是否与当前记录相同了,因为不允许重复:

Do
Do
i = Rnd * Combo1.ListCount
Loop Until i < Combo1.ListCount 
Loop Until Combo1.ItemData(i) = 0

Combo1.ListIndex = i
Combo1.ItemData(i) = 1

要不,你就滚慢点儿。1 秒滚 5 个,够滚 26 秒。

不允许重复的问题,在于对先滚到的手机号,也就是已经看到的手机号不公平。因为停的时候,一定没他神马事了。
--------------------编程问答--------------------
很多问题,不在代码。

先用脑子想一想。
--------------------编程问答--------------------
还有,每次重新滚动之前,要将所有记录的 ItemData 清零:

For i = 0 To Combo1.ListCount - 1
  Combo1.ItemData(i) = 0
Next i
--------------------编程问答-------------------- 使用随机数函数Rnd,必须设置随机种子randomize(),不然程序打开后会重复 --------------------编程问答--------------------
引用 15 楼  的回复:
很多问题,不在代码。

先用脑子想一想。
其实我觉得这个本身设计是不是有点问题呀,是不是不要用Combobox。把所有数据读进来,让到一个数组里面去。
让这些手机号死命滚动,然后停,出现过一次的,就做个标记,下次不能再出现了,然后让剩余的再死命滚动,然后依此类推。。。这样公平吧~~ --------------------编程问答--------------------
你想用数组,当然可以。

不过,VB 的精髓就是使用控件来简化代码。

你觉得使用数组和 Combo 控件在逻辑上有什么本质的区别吗?Combo 的 ItemData 在这里就是标记。

看问题,要看本质,也就是逻辑。具体实现是次要的。
--------------------编程问答-------------------- --------------------编程问答-------------------- 添加音乐的话,再加一个 Windows MediaPlayer 控件,属性设置成隐藏,自定义里添加音乐文件的地址,设成自动启动,打开程序的话就自动播放了。 --------------------编程问答-------------------- 哇,大家都好厉害呀!!~ --------------------编程问答-------------------- 哇,大家都好厉害呀!!~
补充:VB ,  基础类
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,