乐透游戏
看看,Buntt 蛋糕,不,只是另一个带有翻滚动画的乐透游戏。
引言
您有赌博的习惯吗?如果是这样,对我就好。 这是对“佐治亚州彩票兆彩”的模仿。 它有五个白球的翻滚动画,以及兆彩球的翻滚动画。 它是免费的,不会让您破产。 它在 DataGridView
中显示了从年初至今的所有中奖号码。 我想您可以使用它来查询最常出现的号码,以便在游戏中略占优势。
背景
我见过各种各样的彩票程序,但没有一个带有翻滚动画,至少到目前为止还没有。 我唯一看到的是一个 VB 5 的例子,我确实使用了并升级了用于 VB5 版本的类文件。 我不知道作者是谁,因为这个例子是打印出来的,比泥土还老三天,但我仍然保留着它。
动画
动画发生在两个不同的事件中。 tumbleTimer_Tick
事件和 pnlTumble_Paint
事件。 我最初打算使用 PictureBox
控件进行动画,但被告知了不使用它的原因,并被指向 Panel
控件的方向。 PictureBox
用于显示图像。 就这样。 PictureBox
有我们不需要的额外负担。 tumbleTimer_Tick
和 pnlTumble_Paint
事件的代码非常简单,我们确实遵循了“Windows 事件驱动规则”。
Private Sub tumbleTimer_Tick(sender As Object, _
e As System.EventArgs) Handles tumbleTimer.Tick
_showGraphic = True
pnlTumble.Invalidate()
End Sub
我们只需将一个 Boolean
设置为 True
并 Invalidate
我们用于动画的 Panel
。 Paint
事件是动画的核心部分。 在 Panel
内部,我们绘制一个包含圆圈和居中文本的矩形。 我们这样做 56 次。 我们通过将所有内容涂成黑色来清除 Panel
,释放图形,然后重新开始。
Private Sub pnlTumble_Paint(sender As Object, _
e As System.Windows.Forms.PaintEventArgs) Handles pnlTumble.Paint
Dim i As Integer = 0
Dim xPos As Integer
Dim yPos As Integer
Dim rr As New Random
Dim rect As New Rectangle
For i = 1 To 56
xPos = rr.Next(1, 300)
yPos = rr.Next(1, 400)
rect.Height = 50
rect.Width = 50
rect.Location = New Point(xPos, yPos)
e.Graphics.FillEllipse(Brushes.White, rect.X, rect.Y, 50, 50)
Dim f As Font = New Font("Arial", 12, FontStyle.Bold)
Dim StringSize As SizeF = e.Graphics.MeasureString(i.ToString(), f)
e.Graphics.DrawString(i.ToString(), f, Brushes.Black, _
(rect.Left + 25) - (StringSize.Width / 2), _
(rect.Top + 25) - (StringSize.Height / 2))
Next
e.Graphics.Clear(Color.Black)
e.Graphics.Dispose()
End Sub
单击获取球
当您单击获取第一个球时,您会认为它是来自翻滚动画,但实际上,动画只是一个门面(发音为 "f·säd"),代表实际发生的事情。 在 btnNextBall_Click
事件中,我们首先获取已选球的当前计数;如果所有球都被抓取,那么我们重新开始,然后我们选择下一个唯一的乒乓球 GrabNext(PPBalls)
,然后我们做一些 UI 美化。
GrabNext(PPBalls)
是我们获取乒乓球随机数的地方。 clsRandom
类只有两个属性、三个子程序和六个变量。 属性是...
随机
Randomint
子程序是...
Shuffle(dX As Double)
Zap()
Stir(dX As Double)
变量是...
Const SIZE
MinInt Integer
MaxInt Integer
BJP(SIZE - 1) Double
RSP Integer
PJP Integer
Shuffle
子程序在 Form_Load
事件中被调用,该事件调用 Zap
子程序和 Stir
子程序。 btnNextBall_Click
事件和 GrabNext(ByVal Ary())
子程序的代码如下...
Private Sub btnNextBall_Click(sender As Object, _
e As System.EventArgs) Handles btnNextBall.Click
If btnNextBall.Text = "Re-Start" Then
btnNextBall.Text = "Next Ball"
tumbleTimer.Start()
End If
Dim i As Integer
i = PPBalls(0)
If i = 5 Then
For i = 0 To 5
PPBalls(i) = 0
Next
Exit Sub
End If
GrabNext(PPBalls)
If PPBalls(0) = 5 Then
btnNextBall.Text = "Re-Start"
tumbleTimer.Stop()
pnlTumble.Hide()
pnlMegaTumbler.Show()
tumbleMegaTimer.Start()
btnNextBall.Location = New Point(593, 546)
btnNextBall.Enabled = False
btnNextBall.Visible = False
btnMegaBall.Location = New Point(594, 547)
btnMegaBall.Enabled = True
btnMegaBall.Visible = True
End If
End Sub
Private Sub GrabNext(ByVal Ary())
Dim i As Integer
Dim j As Integer = 0
Ary(0) = Ary(0) + 1
i = Ary(0)
Do
Ary(i) = r.Randomint
DisplayBall(Ary(i))
If i > 1 Then
For j = 1 To (i - 1)
If Ary(i) = Ary(j) Then
Ary(i) = 0
End If
Next
End If
Loop Until Ary(i)
End Sub
我本打算偏离主题,写一点关于“Windows 事件驱动规则”的内容,但在对该主题进行了一些搜索后,我发现这本身就是另一篇文章。 因此,我将坚持以下“Windows 事件驱动”子程序。
DisplayBall()
子程序是一个漫长的 If
, ElseIf
, End If
语句。 我们调用 Panel.Invalidate()
命令,该命令又调用 Panel.Paint
事件。 这遵循 Windows 事件驱动规则。 可以在维基百科上找到更多关于此主题的信息,或者通过 Google 搜索,其中显示了关于该主题的许多链接。
Private Sub DisplayBall(ByVal ii As Integer)
myBall = Nothing 'Exception Prevention.
If ii = 1 Then
myBall = 1
_showGraphic = True
Me.pnl1.Invalidate()
ElseIf ii = 2 Then
myBall = 2
_showGraphic = True
Me.pnl2.Invalidate()
'Code Continues...
'...
'...
'...
ElseIf ii = 55 Then
myBall = 55
_showGraphic = True
Me.pnl55.Invalidate()
ElseIf ii = 56 Then
myBall = 56
_showGraphic = True
Me.pnl56.Invalidate()
End If
Private Sub pnl1_Paint(sender As Object, e As System.Windows.Forms.PaintEventArgs) _
Handles pnl1.Paint, pnl2.Paint, pnl3.Paint, pnl4.Paint, pnl5.Paint, _
pnl6.Paint, pnl7.Paint, pnl8.Paint, pnl9.Paint, _
pnl10.Paint, pnl11.Paint, pnl12.Paint, pnl13.Paint, _
pnl14.Paint, pnl15.Paint, pnl16.Paint, pnl17.Paint, _
pnl18.Paint, pnl19.Paint, pnl20.Paint, pnl21.Paint, _
pnl22.Paint, pnl23.Paint, pnl24.Paint, pnl25.Paint, _
pnl26.Paint, pnl27.Paint, pnl28.Paint, pnl29.Paint, _
pnl30.Paint, pnl31.Paint, pnl32.Paint, pnl33.Paint, _
pnl34.Paint, pnl35.Paint, pnl36.Paint, pnl37.Paint, _
pnl38.Paint, pnl39.Paint, pnl40.Paint, pnl41.Paint, _
pnl42.Paint, pnl43.Paint, pnl44.Paint, pnl45.Paint, _
pnl46.Paint, pnl47.Paint, pnl48.Paint, pnl49.Paint, _
pnl50.Paint, pnl51.Paint, pnl52.Paint, pnl53.Paint, _
pnl54.Paint, pnl55.Paint, pnl56.Paint
If _showGraphic Then
Dim rect As New Rectangle
rect.Height = 40
rect.Width = 40
rect.Location = New Point(0, 0)
e.Graphics.FillEllipse(Brushes.White, rect.X, rect.Y, 40, 40)
'Dim t As String = myBall.ToString()
Dim f As Font = New Font("Arial", 10, FontStyle.Bold)
Dim StringSize As SizeF = e.Graphics.MeasureString(myBall.ToString(), f)
e.Graphics.DrawString(myBall.ToString(), f, Brushes.Black, _
(rect.Left + 20) - (StringSize.Width / 2), _
(rect.Top + 20) - (StringSize.Height / 2))
e.Graphics.Dispose()
End If
End Sub
兆彩球子程序与上面显示的白球子程序几乎相同,只是规模较小,因为我们只调用一个球。
如果本文中有任何内容听起来有点冗余,那么它可能就是,所以请不要留言说明这一点,因为我已经知道了。