PROGRAMA POBLACIÓN: CON CONTROLES ACTIVEX
CONTROL ACTIVEX PERSONAJE
Se trata de crear una
población de animaciones en las cuales el estado de la animación (moviéndose) o
el sexo de la animación (hombre-mujer) sea escogido por el programa aleatoriamente.
Para ello creamos un control activeX que representará el objeto animación.
Estará formado por un objeto image y un timer.
Con el PaintBrush
o con cualquier otro programa de dibujo, realizamos una secuencia de imágenes
para luego realizar la aplicación. En este caso hemos realizado dos personajes:
hombre y mujer y que se moverán hacia la derecha, h1 y h2, otra que se mueve
hacia la izquierda h3 y h4 que bajarán h5 y h6 y por último que subirán h7 y
h8.
El Active X estará formado
por un Image y un timer
Añadimos dos variables
públicas, personaje y estado que serán dos enteros e implementamos el código
como sigue.
Public personaje As Integer 'variable pública personaje
Public edad As Integer 'variable pública edad
Public estado As Integer 'variable pública estado
Dim contador As Integer 'variable contador
Dim s As Integer 'variable
'Función de inicializar del
control
Private Sub UserControl_Initialize()
'0 hombre y 1
mujer
personaje = 0
' de
edad = 0
' 0=parado 1=andando derecha 2=andando izquierda
estado = 4
'inicializamos el timer
Timer1.Interval =
100
contador = 0
End Sub
'Función
temporizador
Private Sub Timer1_Timer()
contador =
contador + 1
If contador >
2 Then contador = 0
edad = edad + 1
If edad >
1200 Then edad =0 'edad
máxima
Select
Case personaje
Case 0: s = "h" 'fichero de hombre
Case 1: s = "m" 'fichero de mujer
End Select
Select Case estado
Case 0:
Image1.Picture = LoadPicture(App.Path & "\DIBUJOS\" & s & estado & ".bmp")
Case 1:
If contador = 1 Then Image1.Picture = LoadPicture(App.Path & "\DIBUJOS\" & s & estado & ".bmp") Else Image1.Picture = LoadPicture(App.Path & "\DIBUJOS\"
& s & estado + 1 & ".bmp")
Case 2:
If contador = 1 Then Image1.Picture = LoadPicture(App.Path & "\DIBUJOS\" & s & estado + 1 & ".bmp") Else Image1.Picture = LoadPicture(App.Path &
"\DIBUJOS\" & s & estado + 2 &
".bmp")
Case 3:
If contador = 1 Then Image1.Picture = LoadPicture(App.Path & "\DIBUJOS\" & s & estado + 2 & ".bmp") Else Image1.Picture = LoadPicture(App.Path &
"\DIBUJOS\" & s & estado + 3 &
".bmp")
Case 4:
If contador = 1 Then Image1.Picture = LoadPicture(App.Path & "\DIBUJOS\" & s & estado + 3 & ".bmp") Else Image1.Picture = LoadPicture(App.Path &
"\DIBUJOS\" & s & estado + 4 &
".bmp")
End Select
End Sub
Una vez creado el control, lo
podemos comprobar ejecutandolo. Después generamos el
fichero usercontrol.ocx.
PROGRAMA POBLACIÓN
Creamos una nueva aplicación
partiendo de un formulario, agregamos a la barra de herramientas el control activex que hemos generado.
Agregams al formulario una matriz de 3 componentes del tipo personaje.ocx que hemos realizado en la primera arte del
programa, un timer y un botón.
Introducimos el siguiente
código con el que les daremos un valor aleatorio a la posición y al estado del activex, proporcionando un movimiento al control.
Dim I As Integer 'indice
Dim estado, edad As Integer ' variables estado y edad
Dim a 'variable aleatoria
Dim n As Integer ' numero de personas
'Función
inicial
Private Sub Form_Load()
Randomize
pensar
End Sub
'Función pensar
Private Sub pensar()
For I = 0 To 2
a = Rnd
* 100
UserControl11(I).Top
= I * 1300 + 10
If a <= 20 Then UserControl11(I).estado = 0
If a > 20 And a <= 40
Then UserControl11(I).estado
= 1
If a > 40 And a <= 60
Then UserControl11(I).estado
= 2
If a > 60 And a <= 80
Then UserControl11(I).estado
= 3
If a > 80 Then UserControl11(I).estado = 4
If a > 50 Then UserControl11(I).personaje = 0
Else UserControl11(I).personaje = 1
UserControl11(I).edad = 10
Next
End Sub
'Temporizador
Private Sub Timer1_Timer()
For I = 0 To 2
If UserControl11(I).estado <> 0 Then
If UserControl11(I).estado = 1 Then UserControl11(I).Left =
UserControl11(I).Left + 20
If UserControl11(I).estado = 2 Then UserControl11(I).Left =
UserControl11(I).Left - 20
If UserControl11(I).estado = 3 Then UserControl11(I).Top = UserControl11(I).Top
+ 20
If UserControl11(I).estado = 4 Then UserControl11(I).Top = UserControl11(I).Top
- 20
End If
If UserControl11(I).Left
< 0 Then UserControl11(I).estado = 1
If UserControl11(I).Left
> Me.Width - UserControl11(I).Width Then
UserControl11(I).estado = 2
If UserControl11(I).Top
< 0 Then UserControl11(I).estado = 3
If UserControl11(I).Top
> Me.Height - UserControl11(I).Height Then
UserControl11(I).estado = 4
Next
End Sub
'Boton pensar
Private Sub Command1_Click()
pensar
End Sub