Contador en visual basic 6.0

Tengo un juego de dados que cada vez que apretó un botón con la ayuda de un timer me pone en funcionamiento un dado y randomiza solo los numero y en un momento se detiene pero antes ya detecta el numero que va salir y si es 1 ejemplo muestra la imagen que pertenece a ese numero.
El tema es que quiero cada vez que el numero generado si sale 1 ejemplo me cree un contador de esa imagen de ese numero y me muestre en una label ej si sale una imagen con el numero 1 contador igual 1, si al apretar el botón sale otra vez en el dado el 1 contador 2 y así siempre que salga el numero ese con esa imagen del dado me sume el contador, el tema es que no logro hacer eso. Les muestro el código.
Dim cda As Integer           'contador personal del dado
Dim cda2 As Integer
Dim numdado As Integer       'numero que que saldrá en el dado
Dim numdado2 As Integer
Dim trmlisto As Integer      'Valdra uno cuando la animacion se encuentre con el numero buscado por primera vez
Dim trmlisto2 As Integer
Private Sub cmdLanzarDado_Click()
    Randomize
    numdado = Int(Rnd * 6) + 1 'generamos un numero aleatorio de 1-6
    numdado2 = Int(Rnd * 6) + 1 'generamos un numero aleatorio de 1-6
    lblNum = numdado 'mostramos el numero generado en el label
    lblNum2 = numdado2 'mostramos el numero generado en el label2
    trmlisto = 0                'inicializamos la flag
    tmrdadoanim.Enabled = True  'activamos el timer de animacion
    trmlisto2 = 0                'inicializamos la flag2
    tmrdadoanim2. Enabled = True  'activamos el timer de animacion2
End Sub
Private Sub tmrdadoanim_Timer()
    cda = cda + 1
    If cda > 31 Then cda = 1         'cuando llega a 31 (imagen 31) regresa de nuevo a la 1
    If cda = dibdado(numdado) Then   'cuando coincide el dibujo del numero del dado con el numero que queremos que aparezca en el dado
        'tmrdadoanim.Enabled = False 'Si queremos que no de tanta vuelta, quitamos el comment de esta linea y borramos las siguientes dos
        If trmlisto = 1 Then tmrdadoanim.Enabled = False 'si la flag estaba activada, apagamos el timer
        trmlisto = 1 'activamos la flag
    End If
    pctDado.Picture = LoadPicture(App.Path & "/dado/" & cda & ".jpg", , vbBlack) 'cargamos la imagen respectiva
End Sub
Y en esta función esta el tema si numdado es 1 que me sume el contador pero siempre me lo pone el 0
'devuelve el nombre del dibujo que contiene el numero del dado
Function dibdado(numd As Integer) As Integer
    Dim Cont As Integer
    Dim Cont2 As Integer
    Dim col As Collection
    Dim I As Long
    Set col = New Collection
    Select Case numd
        Case 1: dibdado = 15
        Case 2: dibdado = 19
        Case 3: dibdado = 7
        Case 4: dibdado = 23
        Case 5: dibdado = 27
        Case 6: dibdado = 1
        End Select
If numdado = 1 Then
    Cont = Cont + 1
    AtaqueLb.Caption = Cont
    End If
If numdado = 2 Then
    Cont = Cont + 1
    DefensaLb.Caption = Cont
    End If
If numdado = 3 Then
    Cont = Cont + 1
    MovimientoLb.Caption = Cont
    End If
If numdado = 4 Then
    Cont = Cont + 1
    MagiaLb.Caption = Cont
    End If
If numdado = 5 Then
    Cont = Cont + 1
    InvocarLb.Caption = Cont
    End If
If numdado = 6 Then
    Cont = Cont + 1
    InvocarLb.Caption = Cont
    End If
        End Function

2 Respuestas

Respuesta
1
¿Tu problema es que el contador no avanza?
Según lo que vi es que cada vez que inicias la función dibdado inicializas la variable "cont" por ende toma el valor de 0 y después más abajo pones:
cont=cont+1
Entonces cont siempre va a tomar el valor de 1
lo que puedes hacer es cambiar eso por (en todos los 6 if):
cont=cont+1    ----->      NombreDelLabel.Caption= val(NombreDelLabel.Caption)+1
bueno y el valor de cada label debe ser NombreDelLabel.Caption=0 (al inicio del programa)
If lblNum.Caption = 1 Then
    Cont = Cont + 1
    tmrdadoanim.Interval = 0
    AtaqueLb.Caption = Val(AtaqueLb.Caption) + 1
    AtaqueLb.Caption = Cont
    End If
hola lo que me pasastes me ayudo a que el contador ahora cada vez que sale un numero que pertenece al dado me sume correctamente el contador pero no logro establecer que el timer no se tranque,  si le pongo tmrdadoanim.interval=0 cada vez que el numero es 1 suma el contador pero se para el timer y el dado deja de girar y queda en cualquier imagen no quedando en la que corresponde, y si no pongo tmrdadoanim=0 lo saco el contador se suma solo muchas veces hasta que el timer termina solo. espero una ayudita mas que casi logro sacar esto gracias.
A ver prueba con este código...
Será mejor que copies tu proyecto y pegues este código para que no pierdas lo tuyo... aquí hay cosas que cambié espero sea esto lo que andas buscando
Dim cda As Integer           'contador personal del dado
Dim cda2 As Integer
Dim numdado As Integer       'numero que que saldrá en el dado
Dim numdado2 As Integer
Dim trmlisto As Integer      'Valdra uno cuando la animacion se encuentre con el numero buscado por primera vez
Dim trmlisto2 As Integer
Private Sub FRandom()
    Randomize
    numdado = Int(Rnd * 6) + 1 'generamos un numero aleatorio de 1-6
    numdado2 = Int(Rnd * 6) + 1 'generamos un numero aleatorio de 1-6
    lblNum = numdado 'mostramos el numero generado en el label
    lblNum2 = numdado2 'mostramos el numero generado en el label2
    trmlisto = 0                'inicializamos la flag
    tmrdadoanim.Enabled = True  'activamos el timer de animacion
    trmlisto2 = 0                'inicializamos la flag2
    tmrdadoanim2.Enabled = True  'activamos el timer de animacion2
End Sub
Private Sub cmdLanzarDado_Click()
tmrdadoanim.Enabled = tmrdadoanim.Enabled + 1
End Sub
Private Sub tmrdadoanim_Timer()
    FRandom
    cda = cda + 1
    If cda > 31 Then cda = 1         'cuando llega a 31 (imagen 31) regresa de nuevo a la 1
    If cda = dibdado(numdado) Then   'cuando coincide el dibujo del numero del dado con el numero que queremos que aparezca en el dado
        'tmrdadoanim.Enabled = False 'Si queremos que no de tanta vuelta, quitamos el comment de esta linea y borramos las siguientes dos
        If trmlisto = 1 Then tmrdadoanim.Enabled = False 'si la flag estaba activada, apagamos el timer
        trmlisto = 1 'activamos la flag
    End If
    pctDado.Picture = LoadPicture(App.Path & "/dado/" & cda & ".jpg", , vbBlack) 'cargamos la imagen respectiva
End Sub
'y en esta funcion esta el tema si numdado es 1 que me sume el contador pero siempre me lo pone el 0
'devuelve el nombre del dibujo que contiene el numero del dado
Function dibdado(numd As Integer) As Integer
    'estas variable no las utilizaremos
    'Dim Cont As Integer
    'Dim Cont2 As Integer
    Dim col As Collection
    Dim I As Long
    Set col = New Collection
    'esto no se pk lo tienes
    Select Case numd
        Case 1: dibdado = 15
        Case 2: dibdado = 19
        Case 3: dibdado = 7
        Case 4: dibdado = 23
        Case 5: dibdado = 27
        Case 6: dibdado = 1
        End Select
    If numdado = 1 Then
        AtaqueLb.Caption = Val(AtaqueLb.Caption) + 1
    ElseIf numdado = 2 Then
        DefensaLb.Caption = Val(DefensaLb.Caption) + 1
    ElseIf numdado = 3 Then
        MovimientoLb.Caption = Val(MovimientoLb.Caption) + 1
    ElseIf numdado = 4 Then
        MagiaLb.Caption = Val(MagiaLb.Caption) + 1
    ElseIf numdado = 5 Then
        InvocarLb.Caption = Val(InvocarLb.Caption) + 1
    ElseIf numdado = 6 Then
        InvocarLb2.Caption = Val(InvocarLb2.Caption) + 1
    End If
End Function
con respecto a tmrdadoanim.interval=0 creo que tienes una confusion, te explico
interval quiere decir cual es el intervalo de tiempo (medido en milesimas de segundo) para que se ejecute la accion del timer
entonces si tenemos:
tmrdadoanim.interval=500     <--- cada medio segundo se ejecutara el código existente en tmrdadoanim_timer
tmrdadoanim.enable=true  <--- activa el timer
saludos
Respuesta
1
No se si lo habrás solucionado ya pero si no he entendido mal el problema es que la variable cont dentro de la función Function dibdado(numd As Integer) As Integer
Siempre esta ha cero. El problema es que la tiene definida dentro de la propia función por lo tanto cuando el programa sale de la función esta variable (cont) deja de tener valor. La solución seria que la declararas fuera de la función y las inicializaras al principio de la ejecución.
Dim Cont As Integer
Dim Cont2 As Integer
Private Sub cmdLanzarDado_Click()
    Randomize 
Cont = 0;
Cont2 =0;

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas