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.

Ficheros de proyecto

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 0 a 120 máximo

    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