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

andy_514 2012-07-11 09:13:10
手机号中的各个数字都是滚动的,能配背景音乐,不知道哪位大侠能帮帮忙不~~~

或者有其他的方案也行,,谢谢啦。。。
...全文
1138 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
andy_514 2012-07-19
  • 打赏
  • 举报
回复
哇,大家都好厉害呀!!~
andy_514 2012-07-19
  • 打赏
  • 举报
回复
哇,大家都好厉害呀!!~
万万年 2012-07-19
  • 打赏
  • 举报
回复
添加音乐的话,再加一个 Windows MediaPlayer 控件,属性设置成隐藏,自定义里添加音乐文件的地址,设成自动启动,打开程序的话就自动播放了。
万万年 2012-07-18
  • 打赏
  • 举报
回复
我是新手,写了个小程序,请大家多指点。
用到的控件:Label,Timer,Command。
还有一个记事本文件,存放电话号码。

Option Explicit
Dim phonestr As String '要显示的电话号码


Private Sub Command1_Click()
If Command1.Caption = "Start" Then
Command1.Caption = "Stop"
Timer1.Enabled = True

Else
Command1.Caption = "Start"
Timer1.Enabled = False
End If

End Sub

Private Sub Command2_Click()
Close #8 '关闭文件
End
End Sub

Private Sub Form_Load()
Label1.Caption = "中奖号码"
Command1.Caption = "Start"
Command2.Caption = "Quit"
Timer1.Interval = 100
Timer1.Enabled = False
Open "E:\lcf.txt" For Input As #8 '读取电话号码文件
End Sub

Private Sub Timer1_Timer()
Dim k As Integer
k = Rnd * 10 + 1 '文本中电话号码随机序号

If EOF(8) Then '滚动号码
Seek #8, k '设置随机读取位置
End If

Line Input #8, phonestr


Label1.Caption = phonestr
Label1.Refresh

End Sub
of123 2012-07-18
  • 打赏
  • 举报
回复

你想用数组,当然可以。

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

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

看问题,要看本质,也就是逻辑。具体实现是次要的。
twohorses 2012-07-17
  • 打赏
  • 举报
回复
使用随机数函数Rnd,必须设置随机种子randomize(),不然程序打开后会重复
of123 2012-07-17
  • 打赏
  • 举报
回复

还有,每次重新滚动之前,要将所有记录的 ItemData 清零:

For i = 0 To Combo1.ListCount - 1
Combo1.ItemData(i) = 0
Next i
of123 2012-07-17
  • 打赏
  • 举报
回复

很多问题,不在代码。

先用脑子想一想。
of123 2012-07-17
  • 打赏
  • 举报
回复
是啊,都显示过了,就死循环了。所以说,你的手机号必须足够多。

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 秒。

不允许重复的问题,在于对先滚到的手机号,也就是已经看到的手机号不公平。因为停的时候,一定没他神马事了。
andy_514 2012-07-17
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 的回复:]
很多问题,不在代码。

先用脑子想一想。
[/Quote]其实我觉得这个本身设计是不是有点问题呀,是不是不要用Combobox。把所有数据读进来,让到一个数组里面去。
让这些手机号死命滚动,然后停,出现过一次的,就做个标记,下次不能再出现了,然后让剩余的再死命滚动,然后依此类推。。。这样公平吧~~
andy_514 2012-07-16
  • 打赏
  • 举报
回复
[Quote=引用 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
[/Quote]死循环哦,,%>_<%~~
of123 2012-07-16
  • 打赏
  • 举报
回复
试试:

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
andy_514 2012-07-14
  • 打赏
  • 举报
回复
有人回复不???
of123 2012-07-13
  • 打赏
  • 举报
回复
不重复的:(你的备选手机号要足够多)

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

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

andy_514 2012-07-13
  • 打赏
  • 举报
回复
我的备选手机号为130个左右,
Loop Until i <> Combo1.ListIndex And i < Combo1.ListCount And Combo1.ItemData(i) = 0

这条语句会出现“无效属性数组索引”错误
怎么回事呢?[Quote=引用 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
……
[/Quote]
冰天天 2012-07-12
  • 打赏
  • 举报
回复
随机取数
andy_514 2012-07-12
  • 打赏
  • 举报
回复
呵,我是不是有点笨哦,,
andy_514 2012-07-12
  • 打赏
  • 举报
回复
很厉害!不错呀!可是这会重复啊!怎么才能做到不重复出现呢?[Quote=引用 5 楼 的回复:]
4 个控件。

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

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

Private Sub Command2_C……
[/Quote]
of123 2012-07-12
  • 打赏
  • 举报
回复
4 个控件。

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

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

Private Sub Command2_Click()
Timer1.Enabled = False
End Sub

Private Sub Form_Load()
Dim strLine As String

Open "yourfile.txt" For Input As #1
Do Until EOF(1)
Line Input #1, strLine
If strLine > "" Then Combo1.AddItem strLine
Loop

Timer1.Interval = 50
Timer1.Enabled = False

Randomize

End Sub

Private Sub Timer1_Timer()
Dim i As Integer

Do
i = Rnd * Combo1.ListCount
Loop Until i <> Combo1.ListIndex And i < Combo1.ListCount

Combo1.ListIndex = i
End Sub
of123 2012-07-12
  • 打赏
  • 举报
回复

其实,抽奖算法就是随机数的应用,瞬间完成。

你在电视上看到滚动的那个,只是视觉噱头。你用 Timer 就可以实现这样的功能。
加载更多回复(3)

7,763

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧