• Vui lòng đọc nội qui diễn đàn để tránh bị xóa bài viết
  • Tìm kiếm trước khi đặt câu hỏi

Hiệu ứng tuyết rơi ! VB.NET

Các bài viết hướng dẫn, giúp các bạn hiểu và tiếp cận với Visual Basic nhanh hơn
Hình đại diện của người dùng
NTN
Thành viên tâm huyết
Thành viên tâm huyết
Bài viết: 472
Ngày tham gia: T.Tư 05/02/2014 3:43 pm
Đến từ: Cao Lãnh, Đồng Tháp,Việt Nam
Has thanked: 19 time
Been thanked: 7 time
Liên hệ:

Hiệu ứng tuyết rơi ! VB.NET

Gửi bàigửi bởi NTN » T.Năm 29/05/2014 6:20 am

Thủ thuật: Hiệu ứng tuyết rơi ! VB.NET
Tác giả: Sưu tầm : NTN
Mô tả:


Vì sắp về của mùa đông tôi đã tạo ra một số hiệu ứng tuyết đồ họa đẹp,

Tạo ra một hình thức cửa sổ mới, đặt một hộp hình ảnh trên đó, có hộp hình ảnh 'bến' trong biểu mẫu. Và làm cho nền của hình ảnh hộp đen. Thêm một bộ đếm thời gian cho dự án!



Sau đó dán này tại:

Code:

Mã: Chọn hết

Public Class Form1


    Dim SnowFlakes As SnowCloud
    Dim LastRun As TimeSpan
    Public RandomClass As New Random




    Public Class SnowCloud
        Inherits List(Of SnowFlake)
        Private CloudWidth As Integer
        Private CloudHeight As Integer
        Public StackFor(4000) As Integer


        Sub New(ByVal Width As Integer, ByVal Height As Integer)
            CloudWidth = Width
            For Counter As Integer = 0 To StackFor.Length - 1
                StackFor(Counter) = Height
            Next
        End Sub


        Public Sub NewFlake(Optional ByVal NumberOfFlakes As Integer = 1)

            For a As Integer = 1 To NumberOfFlakes
                Me.Add(New SnowFlake(CloudWidth))
            Next


        End Sub


        Public Sub Move()
            ' you cannot remove items from a list while looping true it, thats why we made a deathrow
            Dim DeathRow As New List(Of SnowFlake)
            For Each MyFlake As SnowFlake In Me
                MyFlake.x = MyFlake.x + MyFlake.DeltaX
                MyFlake.y = MyFlake.y + MyFlake.DeltaY
                MyFlake.XX = MyFlake.x
                MyFlake.YY = MyFlake.y
                If MyFlake.x < 0 Or MyFlake.x > CloudWidth Then
                    DeathRow.Add(MyFlake)
                Else
                    If MyFlake.DeltaX <> 0 Then
                        If MyFlake.YY >= StackFor(MyFlake.XX) Then
                            StackFor(MyFlake.XX) -= 1
                            DeathRow.Add(MyFlake)
                        End If
                    End If
                End If
            Next
            For Each MyFlake As SnowFlake In DeathRow
                Me.Remove(MyFlake)
            Next
            ' mof filer over de Y stack
            For Counter As Integer = 1 To Me.StackFor.Length - 2
                ' make snow tumble of height diferences
                If StackFor(Counter) - StackFor(Counter - 1) > 2 Then
                    StackFor(Counter) -= 1
                    StackFor(Counter - 1) += 1
                End If
                If StackFor(Counter) - StackFor(Counter + 1) > 2 Then
                    StackFor(Counter) -= 1
                    StackFor(Counter + 1) += 1
                End If
            Next
        End Sub


    End Class


    Public Class SnowFlake
        Public sPen As Pen
        Public x, y, DeltaX, DeltaY As Double
        Public XX, YY As Integer
        Sub New(ByVal MaxSpawWidth As Integer)
            Dim MyRc As New Random
            Dim RandomNumber As Integer = (((MyRc.Next And &HFF) / 2) + 128) And &HFF
            Dim CustomColor As Drawing.Color = Drawing.Color.FromArgb(RandomNumber, RandomNumber, RandomNumber, RandomNumber)
            sPen = New Pen(CustomColor) ' color is a random shade of gray
            x = Int(Rnd(1) * MaxSpawWidth)
            y = 0
            DeltaX = (MyRc.NextDouble * 2) - 1 'between -1 and 1
            DeltaY = MyRc.NextDouble * 6    ' between 0 and 6
            'DeltaY = ((RandomNumber / 128) - 1) * 3


            If DeltaY < 0.01 Then DeltaY = 0.01 ' at least 0.01 y speed




        End Sub
    End Class


    Private Sub PictureBox1_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles PictureBox1.Paint
        With e.Graphics
            For Each SnowFlake As SnowFlake In SnowFlakes
                .DrawLine(SnowFlake.sPen, SnowFlake.XX, SnowFlake.YY, SnowFlake.XX + 1, SnowFlake.YY)
            Next
            For Counter As Integer = 0 To Me.PictureBox1.Size.Width
                .DrawLine(Pens.White, Counter, SnowFlakes.StackFor(Counter), Counter, Me.PictureBox1.Height)
            Next
        End With
    End Sub


    Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
        'change every 10th second
        ''If (Now.TimeOfDay - LastRun).Milliseconds > 10 Then
        LastRun = Now.TimeOfDay
        SnowFlakes.NewFlake(15)

        SnowFlakes.Move()
        Me.Text = SnowFlakes.Count
        Me.PictureBox1.Refresh()
        ''End If
    End Sub


    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load


        LastRun = Now.TimeOfDay
        SnowFlakes = New SnowCloud(Me.PictureBox1.Size.Width, Me.PictureBox1.Size.Height)
        Timer1.Enabled = True
    End Sub
End Class


Có phun!

Hình ảnh

=)) =)) =)) =)) =)) =)) =)) =)) =)) =)) =)) =)) =)) =)) =)) =)) =)) =)) =)) =)) =)) =)) =)) =)) =)) =)) =)) =)) =)) =)) =)) =))



Quay về “[VB] Bài viết hướng dẫn”

Đang trực tuyến

Đang xem chuyên mục này: Không có thành viên nào trực tuyến.1 khách