Nieve en VB.net
[Donde est�n �Point� y �PSet�]
Fecha: 21/Abr/2003 (15/Abril/2003)
Autor: Jose Luis Quintero Méndez
Es te c�digo nos muestra como simular nieve en vb.net de una forma un poco tosca. Con este peque�o c�digo lo que se intenta es ver el cambio que han sufrido una serie de sentencias en el nuevo lenguaje vb.net entre estas se encuentran �Point� y �PSet� las cuales antes utiliz�bamos directamente desde un formulario.
Tambi�n se incluye el c�digo para la versi�n de Visual Basic 6.0 para as� poder ver las diferencias mas claras entre los dos lenguajes.
'**************************************************************************************** '* C�digo realizado por Jos� Luis Quintero � (Libre distribuci�n) * '* * '* Descripci�n: * '* * '* Ejemplo de como simular nieve en visualbasic .Net y los cambios que han sufrido varias * '* de sus sentencias como por ejemplo �Point� y �PSet� * '* * '**************************************************************************************** 'Variables globales Dim intlin(110) As Integer ' Array el cual contiene la l�nea de cada copo de nieve Dim intcol(110) As Integer ' Array el cual contiene la columna de cada copo de nieve Dim ContNumCopo As Integer ' Contador de Copos Dim bm As Bitmap Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Dim wid As Integer Dim hgt As Integer Dim x As Integer wid = PictureBox1.ClientRectangle.Width hgt = PictureBox1.ClientRectangle.Height 'Creamos el Bitmap bm = New Bitmap("Dibujo1.bmp") PictureBox1.Width = bm.Width PictureBox1.Height = bm.Height Me.Width = bm.Width + 8 Me.Height = bm.Height + 26 'Colocamos aleatoria ment� un copo en una columna For x = 0 To 110 : intcol(x) = Int(Rnd() * PictureBox1.Width) : Next x intlin(ContNumCopo) = 0 Randomize() End Sub Function ElijeLado() Dim clr As System.Drawing.Color Dim clr1 As System.Drawing.Color Dim Lado(110) As Integer ElijeLado = False 'Ponemos aleatoria ment� el lado por el cual rodara el copo Lado(ContNumCopo) = Rnd() * 1 If Lado(ContNumCopo) = 0 Then clr = bm.GetPixel(intcol(ContNumCopo) + 1, intlin(ContNumCopo) + 1) clr1 = bm.GetPixel(intcol(ContNumCopo) - 1, intlin(ContNumCopo) + 1) If clr.ToArgb = 0 Or clr.ToArgb = -16777216 Then Call borrar() intcol(ContNumCopo) = intcol(ContNumCopo) + 1 ElijeLado = True ElseIf clr1.ToArgb = 0 Or clr1.ToArgb = -16777216 Then Call borrar() intcol(ContNumCopo) = intcol(ContNumCopo) - 1 ElijeLado = True End If Else clr = bm.GetPixel(intcol(ContNumCopo) - 1, intlin(ContNumCopo) + 1) clr1 = bm.GetPixel(intcol(ContNumCopo) + 1, intlin(ContNumCopo) + 1) If clr.ToArgb = -16777216 Or clr.ToArgb = 0 Then Call borrar() intcol(ContNumCopo) = intcol(ContNumCopo) - 1 ElijeLado = True ElseIf clr1.ToArgb = -16777216 Or clr1.ToArgb = 0 Then Call borrar() intcol(ContNumCopo) = intcol(ContNumCopo) + 1 ElijeLado = True End If End If End Function Sub borrar() 'Borramos para dar la sensaci�n de movimiento If intlin(ContNumCopo) - 1 > 0 Then bm.SetPixel(intcol(ContNumCopo), intlin(ContNumCopo) - 1, Color.Black) bm.SetPixel(intcol(ContNumCopo), intlin(ContNumCopo), Color.Black) End Sub Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick Dim x As Integer Dim clr As System.Drawing.Color For x = 1 To 50 'Le ponemos un bucle para que aumente la velocidad de la ca�da de copos ContNumCopo = ContNumCopo + 1 ' Aumentamos la variable del array para pasar de copo If ContNumCopo = 110 Then ContNumCopo = 0 Try intlin(ContNumCopo) = intlin(ContNumCopo) + 1 'Incrementamos la y(Linea) del copo actual bm.SetPixel(intcol(ContNumCopo), intlin(ContNumCopo), Color.White) 'Pintamos el copo de blanco If intlin(ContNumCopo) >= PictureBox1.ClientRectangle.Height - 1 Then intlin(ContNumCopo) = 0 intcol(ContNumCopo) = Int(Rnd() * PictureBox1.Width) End If clr = bm.GetPixel(intcol(ContNumCopo), intlin(ContNumCopo) + 1) 'Capturamos el color actual If clr.ToArgb <> -16777216 And clr.ToArgb <> 0 Then If ElijeLado() = False Then intlin(ContNumCopo) = 0 intcol(ContNumCopo) = Int(Rnd() * PictureBox1.ClientRectangle.Width) End If Else If intlin(ContNumCopo) - 1 > 0 Then bm.SetPixel(intcol(ContNumCopo), intlin(ContNumCopo) - 1, Color.Black) End If Catch End Try ' Mostramos la Imagen. PictureBox1.Image = bm Next x End Sub End Class Precisiones :Para que funcione este c�digo crea una PictureBox con el nombre �PictureBox1� y ponle el fondo en negro luego coloca una imagen en el mismo directorio de la aplicaci�n que se llame �Dibujo1.bmp� y pon le en fondo negro la parte por la que quieres que caiga la nieve.
Fichero con el c�digo de ejemplo, tanto para VB6 como para VB.NET (Nievenet.zip - 382 KB)