Feux automatiques
Publié : mer. 24/avr./2013 10:14
				
				Bonjour à tous,
j'ai un petit problème avec mon programme, car j'aimerais synchroniser les feux
Quelqu'un aurait-il une solution ?
Je vous remercie d'avance
			j'ai un petit problème avec mon programme, car j'aimerais synchroniser les feux
Code : Tout sélectionner
EnableExplicit
Enumeration ; Image
  #FeuVert
  #FeuOrange
  #FeuRouge
  #FeuVert2
  #FeuOrange2
  #FeuRouge2
EndEnumeration
Enumeration ; Fenêtre
  #Fenetre
EndEnumeration
Enumeration ; Gadgets
   #Image_Feu
   #Image_Feu2
EndEnumeration
; Voici généré une fois les 4 images des feux de circulation
Procedure Creer_ImageFeu(image = #FeuVert)
  If CreateImage(image, 100, 240)
    If StartDrawing(ImageOutput(image))
      Box(0, 0, 100, 240, $FFFFFF)
      RoundBox(4, 4, 92, 232, 20, 20, $182D17)
      Circle(50, 50, 30, $003900)
      Circle(50, 120, 30, $003900)
      Circle(50, 190, 30, $003900)
      Select image
        Case #FeuVert
          Circle(50, 190, 30, $00FF00)	
      	Case #FeuOrange
          Circle(50, 120, 30, $00FFFF)
        Case #FeuRouge
          Circle(50, 50, 30, $0000FF)
      EndSelect
      StopDrawing()
    EndIf
  EndIf
  image + 1
  If image <= #FeuRouge
    Creer_ImageFeu(image) ; appel récursif à la procédure
  EndIf
EndProcedure
; Voici généré une fois les 4 images des feux de circulation de l'autre rue
Procedure Creer_ImageFeu2(image2 = #FeuVert2)
  If CreateImage(image2, 100, 240)
    If StartDrawing(ImageOutput(image2))
      Box(0, 0, 100, 240, $FFFFFF)
      RoundBox(4, 4, 92, 232, 20, 20, $182D17)
      Circle(50, 50, 30, $003900)
      Circle(50, 120, 30, $003900)
      Circle(50, 190, 30, $003900)
      Select image2
        Case #FeuVert2
          Circle(50, 190, 30, $00FF00)	
      	Case #FeuOrange2
          Circle(50, 120, 30, $00FFFF)
        Case #FeuRouge2
          Circle(50, 50, 30, $0000FF)
      EndSelect
      StopDrawing()
    EndIf
  EndIf
  image2 + 1
  If image2 <= #FeuRouge2
    Creer_ImageFeu2(image2) ; appel récursif à la procédure
  EndIf
EndProcedure
; Voici la fenêtre principale
Procedure Creer_FenetrePrincipale()
  If OpenWindow(#Fenetre, #PB_Ignore, #PB_Ignore, 260, 260, "Feux automatiques", #PB_Window_SystemMenu | #PB_Window_Invisible)
    
    ImageGadget(#Image_Feu, 10, 10, 100, 240, ImageID(#FeuVert), #PB_Image_Border)
    
    ImageGadget(#Image_Feu2, 150, 10, 100, 240, ImageID(#FeuRouge2), #PB_Image_Border)
    ProcedureReturn #True
  EndIf
EndProcedure
Define Etat = #FeuVert, Etat2 = #FeuRouge2
; Produire les 4 images lumières dans la procédure
Creer_ImageFeu()
Creer_ImageFeu2()
If Creer_FenetrePrincipale() ; Si la fenêtre est créée
  HideWindow(#Fenetre, #False); alors l'afficher
  
  AddWindowTimer(#Fenetre, 1, 1000)
  AddWindowTimer(#Fenetre, 2, 2000)
  
  Repeat ; ici commence la boucle d'événements
    Select WaitWindowEvent()
    Case #PB_Event_CloseWindow ; Fenêtre fermée ou Alt+F4 à été pressé
     	Break ; sortie de boucle (dans cet exemple, le programme a fini aussi)
      
     Case #PB_Event_Timer ; l'événement Timer est déclenché
      	Select EventTimer() ;minuterie (Timer nous en avons 2 dans cet exemple!)
        Case 1
          	Select Etat
           	Case #FeuVert
             	Etat = #FeuOrange
             	AddWindowTimer(#Fenetre, 1, 3000) ; phase orange 3 sec.
           	Case #FeuOrange
               	Etat = #FeuRouge
               	AddWindowTimer(#Fenetre, 1, 10000) ; phase vert 10 sec.
                
           	Case #FeuRouge
           		Etat = #FeuVert
               	; nous ajustons le délai d'attente!
               	AddWindowTimer(#Fenetre, 1, 10000) ; phase rouge  10 sec.
            EndSelect
         Case 2
            Select Etat2
           	Case #FeuVert2
             	Etat2 = #FeuOrange2
             	AddWindowTimer(#Fenetre, 2, 3000) ; phase orange 3 sec.
            ;    
           	Case #FeuOrange2
               	Etat2 = #FeuRouge2
               	AddWindowTimer(#Fenetre, 2, 10000) ; phase vert 10 sec.
                
           	Case #FeuRouge2
           		Etat2 = #FeuVert2
               	; nous ajustons le délai d'attente!
               	AddWindowTimer(#Fenetre, 2, 10000) ; phase rouge  10 sec.
           	EndSelect
            
           	SetGadgetState(#Image_Feu, ImageID(Etat)) ; image du feu de circulation fixées conformément à l'état actuel
           	SetGadgetState(#Image_Feu2, ImageID(Etat2))
        EndSelect
     EndSelect
  ForEver
EndIf
Je vous remercie d'avance
