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