Feux automatiques

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
Micoute
Messages : 2583
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

Feux automatiques

Message par Micoute »

Bonjour à tous,
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
Quelqu'un aurait-il une solution ?
Je vous remercie d'avance
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 6.20 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Feux automatiques

Message par Backup »

comme ça , ça a l'air de faire :)

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)
	
	
	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
					
					Case #FeuOrange
					Etat = #Feurouge
					
					Case #FeuRouge
					Etat =  #Feuvert
				EndSelect
				select etat
					case  #Feuvert
					etat2=#FeuOrange
					SetGadgetState(#Image_Feu2, ImageID(Etat2))
					delay(500)
					etat2=#FeuRouge
					SetGadgetState(#Image_Feu2, ImageID(Etat2))
					
					case #FeuOrange
					if etat2=#FeuVert
						etat2=#FeuOrange
					Endif
					case  #FeuRouge
					etat2= #FeuVert
					
				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

; EPB
[reedit]
j'ai remis les constantes qui manquaient
Avatar de l’utilisateur
Micoute
Messages : 2583
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

Re: Feux automatiques

Message par Micoute »

Merci beaucoup, monsieur Dobro,
beau travail comme d'habitude, mais quelque chose me chagrine, le feu orange du deuxième poteau s'allume entre le rouge et le vert, alors j'ai fait une petite correction.

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)
   
   
   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
               
               Case #FeuOrange
               Etat = #Feurouge
               
               Case #FeuRouge
               Etat =  #Feuvert
            EndSelect
            Select etat
               Case  #Feuvert
               etat2=#FeuOrange
               SetGadgetState(#Image_Feu2, ImageID(Etat2))
               Delay(500)
               etat2=#FeuRouge
               SetGadgetState(#Image_Feu2, ImageID(Etat2))
               
               Case #FeuOrange
               etat2=#FeuRouge2
               Case  #FeuRouge
               etat2= #FeuVert
            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
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 6.20 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Feux automatiques

Message par Backup »

Micoute a écrit :Merci beaucoup, monsieur Dobro,
beau travail comme d'habitude, mais quelque chose me chagrine, le feu orange du deuxième poteau s'allume entre le rouge et le vert, alors j'ai fait une petite correction.
pas chez moi !
le code que j'ai posté fonctionne correctement :)
(un peu rapide , mais synchro)
Avatar de l’utilisateur
Ar-S
Messages : 9539
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Feux automatiques

Message par Ar-S »

Le code de Dobro est aussi syncro chez moi.
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Avatar de l’utilisateur
Micoute
Messages : 2583
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

Re: Feux automatiques

Message par Micoute »

Autant pour moi, car là, il fonctionne très bien et je ne comprend plus !
Merci beaucoup tout de même, mais j'ai fait une nouvelle version que je trouve pas mal non plus, car l'orange est plus court que le vert ou le rouge, mais ça reste sur le même principe

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, 5000)
   
   
   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
                        SetGadgetState(#Image_Feu, ImageID(Etat))
                        Delay(1000)
                        Etat = #Feurouge                        
                        
                     Case #FeuRouge
                        Etat =  #Feuvert
                  EndSelect
                  
                  Select etat
                     Case  #Feuvert
                        etat2=#FeuOrange
                        SetGadgetState(#Image_Feu2, ImageID(Etat2))
                        Delay(1000)
                        etat2=#FeuRouge
                        
                     Case  #FeuRouge
                        etat2= #FeuVert
                  EndSelect
                  
                  
                  SetGadgetState(#Image_Feu, ImageID(Etat)) ; image du feu de circulation fixées conformément à l'état actuel
                  SetGadgetState(#Image_Feu2, ImageID(Etat2)) ; image du feu du second poteau
            EndSelect
      EndSelect
   ForEver
EndIf
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 6.20 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Avatar de l’utilisateur
nemerod256
Messages : 39
Inscription : dim. 19/févr./2012 1:51
Localisation : la ou la météo est bizarre
Contact :

Re: Feux automatiques

Message par nemerod256 »

bonjour a tout et a tout
pour ton code je trouve que le

Code : Tout sélectionner

...t))
Delay(1000) <-- ici 
E...
a rien a faire ici, car si je déplace la fenêtre il y a des transition de feux qui la bloque
si ma memoir est bonne, le "delay(a)", va faire que le programme ne peu et veux rien faire, t'en que le délai n'est pas terminé
en plus tu utilise un "WindowTimer" se qui fera encore monté mon envie d'optimisé se code
et...
je les fais
voila le code d'origine (qu'elle que message plus haut)
et voila le code en optimisé

Code : Tout sélectionner

For eee = 0 To 2
  If CreateImage(eee,40,86) And StartDrawing(ImageOutput(eee))
    RoundBox(2,2,36,82,23,23,$423E34)
    Select eee
      Case 0
        Circle(20,20,10,$3140D1)
        Circle(20,42,10,$2C2C23)
        Circle(20,64,10,$2C2C23)
      Case 1
        Circle(20,20,10,$2C2C23)
        Circle(20,42,10,$0ABCE6)
        Circle(20,64,10,$2C2C23)
      Case 2
        Circle(20,20,10,$2C2C23)
        Circle(20,42,10,$2C2C23)
        Circle(20,64,10,$07EE6E)
    EndSelect
    StopDrawing()
  EndIf
Next
OpenWindow(0,0,0,0,86,"")
ImageGadget(0,0,0,128,86,ImageID(0))
ImageGadget(1,42,0,40,86,ImageID(0))
AddWindowTimer(0,1,1001)
eee=0
Repeat
  Select WaitWindowEvent()
    Case $3336
      Select eee
        Case 1
          SetGadgetState(0, ImageID(2))
        Case 6
          SetGadgetState(0, ImageID(1)) 
        Case 7
          SetGadgetState(0, ImageID(0)) 
        Case 8
          SetGadgetState(1, ImageID(2))
        Case 13
          SetGadgetState(1, ImageID(1))
        Case 14
          SetGadgetState(1, ImageID(0)):eee=0
      EndSelect
      eee+1
    Case $10
      End
  EndSelect
ForEver
vous allé voir qu'il y a une seul routine pour la création des image, 3 au total
un seul timer de 1sec
et aucun constant, car les constant j'en est un mauvais souvenir
bug et plantage système, alors que j'utilisé une constant ...
bon ...
voila la constant qui bug avec moi "TOUT LES CONSTANT"
donc voila le code en plus petit
purebasic 5.00
minecraft (en jeu (redstone))
perturbe les programme 32 et 64-bit directement dans la RAM du pc !!! (aussi se que je crée avec purebasic (rien que pour le lol ou a des fin de débogage)
bref rien que du plaisir !!!!!
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Feux automatiques

Message par Backup »

le but du topic n'etait pas l'optimisation ;)

de plus tu parles d'optimisation

lorsque je vois :

Code : Tout sélectionner

For eee = 0 To 2
  If CreateImage(eee,40,86) And StartDrawing(ImageOutput(eee))
.....
......
  StopDrawing()
  EndIf
Next
je ne trouve pas ça optimisé vois tu ....
si tu me demande pourquoi , alors je vais rire :roll:
en plus tu utilise un "WindowTimer" se qui fera encore monté mon envie d'optimisé se code
je constate que tu utilises aussi un timer :roll:

a propos du Delay()
il est utilisé ici dans un timer ....
donc il n'interviens QUE lors de l'appel a ce timer

ton prg "optimisé" bloque aussi , si l'on déplace la fenetre en tenant le Click gauche appuyé sur la barre de titre ! :roll:

le Delay() ne fait pas que bloquer le prg , il rend la main au systeme aussi
et aucun constant, car les constant j'en est un mauvais souvenir
bug et plantage système, alors que j'utilisé une constant ...
les Constantes sont utiles , pour deja clarifier le code
tu risques bien plus un plantage en utilisant un numero ,
il suffit de regarder ton code .... tu a une image "0" et un gadget "0" , une fenetre "0", un timer "0" ....
sur un code de plusieurs milliers de lignes , t'es mort ... :roll:

de plus lorsque tu utilises

Code : Tout sélectionner

  Case $3336
dans 1 ans tu va utiliser ton code tu va te dire c'est quoi ce " Case $3336" ??
imagine que Fred dans une mise a jours de Purebasic change la valeur des Evenements ?
ton prg , direct poubelle ! :roll:

bref , ton optimisation , c'est de la merde en boite ! :lol: :lol:


ps : .. ha oui , j'allais oublier , si le but de ton optimisation etait de réduire le nombre de ligne
je pense qu'on peut faire nettement mieux :)
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Feux automatiques

Message par Backup »

t'en veux de l'optimisation ?

tiens :)

Code : Tout sélectionner

enumeration
	#win
	#web
endenumeration
openwindow(#win,0,0,300,300,"",#pb_window_systemmenu|#pb_window_screencentered)
Restore cod:
repeat
	read.i a
	ad$=ad$+chr(a)
until  a=0
WebGadget(#web,0, 0,300,300, ad$)
repeat
	event= Waitwindowevent(2)
until event=#pb_event_closewindow
DataSection
	cod:
	Data.i 104,116,116,112,58,47,47,109,105,99,104,101,108,46,100,111,98,114,111,46,102,114,101,101,46,102,114,47,102,101,117,95,114,111,117,103,101,47,102,101,117,95,114,111,117,103,101,46,104,116,109,108,0
EndDataSection

; EPB
note que j'aurai pu faire plus court , mais j'ai voulu légèrement encoder le truc :)

l'avantage de cette methode, c'est de pouvoir personnaliser une interface de programme
puisqu'elle est facilement mise a jour par le Web ;)
Avatar de l’utilisateur
Micoute
Messages : 2583
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

Re: Feux automatiques

Message par Micoute »

Merci monsieur Dobro, ça c'est de l'optimisation, je n'y ai rien compris, mais pourtant, c'est bien ça que je voulais faire dès le départ.
J'aimerais savoir tout de même ce que signifient les données dans la DataSection, mais j'ai compris que ce sont des caractères imprimables.
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 6.20 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Feux automatiques

Message par Backup »

Micoute a écrit :J'aimerais savoir tout de même ce que signifient les données dans la DataSection, mais j'ai compris que ce sont des caractères imprimables.
c'est l'adresse du lien internet vers l'image (un Gif animé ) :)
que voici : Image
Avatar de l’utilisateur
Ar-S
Messages : 9539
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Feux automatiques

Message par Ar-S »

Dobro a écrit :
Micoute a écrit :J'aimerais savoir tout de même ce que signifient les données dans la DataSection, mais j'ai compris que ce sont des caractères imprimables.
c'est l'adresse du lien internet vers l'image (un Gif animé ) :)
que voici : Image
Mais quel gros blagueur :mrgreen:
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Avatar de l’utilisateur
Micoute
Messages : 2583
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

Re: Feux automatiques

Message par Micoute »

Bonsoir à tous,

je devrais toujours bien analyser le programme avant d'émettre une opinion, car WebGadget(#web,0, 0,300,300, ad$), là j'aurais dû voir !

Merci encore !
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 6.20 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Feux automatiques

Message par Backup »

Ar-S a écrit :Mais quel gros blagueur :mrgreen:
bah quoi , c'est le résultat qui compte non ? :)
Répondre