65.9K
CodeProject 正在变化。 阅读更多。
Home

乐透游戏

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.92/5 (9投票s)

2011 年 9 月 22 日

CPOL

3分钟阅读

viewsIcon

37534

downloadIcon

1772

看看,Buntt 蛋糕,不,只是另一个带有翻滚动画的乐透游戏。

lotto2.jpg

引言

您有赌博的习惯吗?如果是这样,对我就好。 这是对“佐治亚州彩票兆彩”的模仿。 它有五个白球的翻滚动画,以及兆彩球的翻滚动画。 它是免费的,不会让您破产。 它在 DataGridView 中显示了从年初至今的所有中奖号码。 我想您可以使用它来查询最常出现的号码,以便在游戏中略占优势。

背景

我见过各种各样的彩票程序,但没有一个带有翻滚动画,至少到目前为止还没有。 我唯一看到的是一个 VB 5 的例子,我确实使用了并升级了用于 VB5 版本的类文件。 我不知道作者是谁,因为这个例子是打印出来的,比泥土还老三天,但我仍然保留着它。

动画

动画发生在两个不同的事件中。 tumbleTimer_Tick 事件和 pnlTumble_Paint 事件。 我最初打算使用 PictureBox 控件进行动画,但被告知了不使用它的原因,并被指向 Panel 控件的方向。 PictureBox 用于显示图像。 就这样。 PictureBox 有我们不需要的额外负担。 tumbleTimer_TickpnlTumble_Paint 事件的代码非常简单,我们确实遵循了“Windows 事件驱动规则”。

Private Sub tumbleTimer_Tick(sender As Object, _
        e As System.EventArgs) Handles tumbleTimer.Tick
    _showGraphic = True
    pnlTumble.Invalidate()
End Sub

我们只需将一个 Boolean 设置为 TrueInvalidate 我们用于动画的 PanelPaint 事件是动画的核心部分。 在 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

兆彩球子程序与上面显示的白球子程序几乎相同,只是规模较小,因为我们只调用一个球。

如果本文中有任何内容听起来有点冗余,那么它可能就是,所以请不要留言说明这一点,因为我已经知道了。

© . All rights reserved.