Salve a tutti, sto creando con Visual Basic un programma che simula il passaggio di 4 macchine in un incrocio, sincronizzate con i semafori.
Il problema é che non si muovono molto bene, ogni tanto si spostano in modo errato (col rosso vanno avanti o cose del genere).
qui c'é il disegno della form http://sentinella.altervista.org/semaforo.JPG
Qualcuno potrebbe provarlo e dirmi come mai non funziona al meglio ? oppure, se qualcuno ne ha uno fatto da lui che funziona, potrebbe passarmelo? grazie ^__^
Spero di esser stato chiaro, anche se mi sa proprio di no ^^"
codice:
Dim stato1 As Integer
Dim sec As Integer
Dim i As Single

Private Sub rosso2()
v2.BackColor = &H8000&
g2.BackColor = &H4080&
r2.BackColor = &HFF&
v4.BackColor = &H8000&
g4.BackColor = &H4080&
r4.BackColor = &HFF&
End Sub
Private Sub verde2()
v2.BackColor = &HFF00&
g2.BackColor = &H4080&
r2.BackColor = &H80&
v4.BackColor = &HFF00&
g4.BackColor = &H4080&
r4.BackColor = &H80&
End Sub
Private Sub giallo2()
v2.BackColor = &H8000&
g2.BackColor = &HFFFF&
r2.BackColor = &H80&
v4.BackColor = &H8000&
g4.BackColor = &HFFFF&
r4.BackColor = &H80&
End Sub
Private Sub rosso()
v1.BackColor = &H8000&
g1.BackColor = &H4080&
r1.BackColor = &HFF&
v3.BackColor = &H8000&
g3.BackColor = &H4080&
r3.BackColor = &HFF&
End Sub
Private Sub verde()
v1.BackColor = &HFF00&
g1.BackColor = &H4080&
r1.BackColor = &H80&
v3.BackColor = &HFF00&
g3.BackColor = &H4080&
r3.BackColor = &H80&
End Sub
Private Sub giallo()
v1.BackColor = &H8000&
g1.BackColor = &HFFFF&
r1.BackColor = &H80&
v3.BackColor = &H8000&
g3.BackColor = &HFFFF&
r3.BackColor = &H80&
End Sub

Private Sub Form_Load()
stato1 = 1
Call rosso
Call rosso2
End Sub

Private Sub Timer1_Timer()
Dim i As Single

If (stato1 = 1) Then
    Select Case sec
        Case 1
            Call verde
        Case 3
            Call giallo
        Case 5
            Call rosso
    End Select
Else
    Select Case sec
        Case 1
            Call verde2
        Case 3
            Call giallo2
        Case 5
            Call rosso2
    End Select
End If

sec = sec + 1
If (sec = 6) Then
    stato1 = stato1 + 1
    stato1 = stato1 Mod 2
    sec = 0
End If
    
            
End Sub

Private Sub Timer2_Timer()

'Caso 1

If (v1.BackColor = &HFF00&) Then
    macchina1.Top = macchina1.Top + 200
    macchina3.Top = macchina3.Top - 200
End If

If (g1.BackColor = &HFFFF&) Then
     macchina1.Top = macchina1.Top + 200
     macchina3.Top = macchina3.Top - 200
     
End If

If (r1.BackColor = &HFF&) Then
    
    If ((macchina1.Top < (Line5.Y1 - macchina1.Height - 750)) Or (macchina1.Top > (Line5.Y2 - 750))) Then
        macchina1.Top = macchina1.Top + 200
    End If
    
    If ((macchina3.Top > (Line7.Y1 + 950)) Or (macchina3.Top < Line7.Y2)) Then
        macchina3.Top = macchina3.Top - 200
    End If
    
End If

If (macchina1.Top > 10200) Then
        macchina1.Top = -macchina1.Height
End If

If (macchina3.Top <= 0) Then
    macchina3.Top = Form1.Height
End If

'Caso 2

If (v2.BackColor = &HFF00&) Then
    macchina2.Left = macchina2.Left - 200
    macchina4.Left = macchina4.Left + 200
End If

If (g2.BackColor = &HFFFF&) Then
    macchina2.Left = macchina1.Left - 200
    macchina4.Left = macchina4.Left + 200
End If

If (r2.BackColor = &HFF&) Then
    If ((macchina4.Left < Line6.X2 - macchina4.Width - 855) Or (macchina4.Left > Line6.X2 - 855)) Then
        macchina4.Left = macchina4.Left + 200
    End If
    If ((macchina2.Left > Line8.X2 + 820) Or (macchina2.Left < Line8.X2)) Then
        macchina2.Left = macchina2.Left - 200
    End If
End If

If (macchina2.Left <= 0) Then
    macchina2.Left = Form1.Width
End If

If (macchina4.Left > Form1.Width) Then
    macchina4.Left = -macchina4.Width
End If

End Sub