Visualizzazione dei risultati da 1 a 3 su 3
  1. #1

    [VB 6] Simulazione incrocio con semafori

    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

  2. #2
    Utente di HTML.it L'avatar di goku370
    Registrato dal
    Oct 2003
    Messaggi
    569
    Potresti darci un link dal quale scaricare il tuo progetto ? (magari sullo stesso sito in cui c'è l'immagine della form...)
    In questo modo sarebbe più facile capire il funzionamento del tuo programma...
    Una tecnologia sufficientemente avanzata è indistinguibile dalla magia. Terza legge di Clarke

  3. #3
    Essì hai ragione in effetti... detto così é un po' difficile :P visto che ho postato il programma faccio un'altra domandina volevo migliorare il programma facendo in modo da creare più macchine (probabilmente utilizzando una matrice di immagini), solo che scrivendo ad esempio macchina(i).top non me lo accetta..come faccio? Grazie mille
    Clicca qui per scaricare il programma mongolo


    EDIT : Ho trovato l'errore e l'ho modificato, ora mi rispondereste al fatto delle matrici pls ?^^"

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.