Ou son passé les 2.5 Ghz ?!??
Publié : mar. 25/nov./2008 12:33
Bonjour à tous !!
Alors voilà, les premières neiges étant tombées ici, il m'a pris l'envie de créer un petit programme simple qui fait de la neige. (mis en cadeau en bas de post
)
Je me suis amusé à le tester, SUR MON 733 Mhz. Avec 1000 flocons ça commence à ramer. Avant (600-700) ça va nickel.
Alors je me suis dit Génial !! Demain je le teste sur les ordis de l'école de 2.5 Ghz, et normalement, ces ordis executant 2.5/0.73 = 3.4 fois plus d'instructions, Je pourrais aller jusqu'à 3000 flocons avant de ramer..
Et ben niente..grande déception : avec 1000 flocons, ça rame autant que mon 733 Mhz.. Pire encore !! : L'écran plat leur fait des trainées moches, ce qui n'est pas le cas sur mon vieil écran cathodique trinitron !!!
Après je me suis dit : Oui mais il faut optimiser ça avec directX : un screen et des sprites..j'ai essayé et résultat: c'est encore pire !!!!
Donc me voila avec 3 questions pour vous :
1) Comment diable est-ce possible qu'un 2.5 Ghz rame autant que mon 733 Mhz ? Ou plutôt que mon 733 Mhz aille aussi vite que un 2.5 Ghz
2) Est-ce possible d'optimiser mon programme pour mettre plus de flocons ? Si oui, comment ?
3) Une question plus simple : Comment optimiser la fonction Faire_Fond pour qu'elle ne prenne pas 5 secondes pour assombrir une image ?
Alors voici le programme
Attention : Il est un peu lent au démarrage ( Merci Monsieur Point() !!^^)
Merci pour vos réponses, et bon après - midi sous la neige !!
Ajouté par Dobro
édite ce message et regarde les balises employé pour mettre un code !!
([ code] et [/code ])
Merci
Alors voilà, les premières neiges étant tombées ici, il m'a pris l'envie de créer un petit programme simple qui fait de la neige. (mis en cadeau en bas de post

Je me suis amusé à le tester, SUR MON 733 Mhz. Avec 1000 flocons ça commence à ramer. Avant (600-700) ça va nickel.
Alors je me suis dit Génial !! Demain je le teste sur les ordis de l'école de 2.5 Ghz, et normalement, ces ordis executant 2.5/0.73 = 3.4 fois plus d'instructions, Je pourrais aller jusqu'à 3000 flocons avant de ramer..
Et ben niente..grande déception : avec 1000 flocons, ça rame autant que mon 733 Mhz.. Pire encore !! : L'écran plat leur fait des trainées moches, ce qui n'est pas le cas sur mon vieil écran cathodique trinitron !!!
Après je me suis dit : Oui mais il faut optimiser ça avec directX : un screen et des sprites..j'ai essayé et résultat: c'est encore pire !!!!
Donc me voila avec 3 questions pour vous :
1) Comment diable est-ce possible qu'un 2.5 Ghz rame autant que mon 733 Mhz ? Ou plutôt que mon 733 Mhz aille aussi vite que un 2.5 Ghz

2) Est-ce possible d'optimiser mon programme pour mettre plus de flocons ? Si oui, comment ?
3) Une question plus simple : Comment optimiser la fonction Faire_Fond pour qu'elle ne prenne pas 5 secondes pour assombrir une image ?
Alors voici le programme
Attention : Il est un peu lent au démarrage ( Merci Monsieur Point() !!^^)
Code : Tout sélectionner
;Flocons, par Flavien, 2008
#Vrai = 1
#Faux = 0
#Fonce = 150 ;Noircissement
#Nbre_Flocons = 500
#Window_X_Ecartement = 200
#Flocon_Taille_MAX = 3
#Flocon_Couleur_MAX = 100
#Flocon_Vitesse_MAX = 10
#Flocon_Vitesse_MIN = 5
#Flocon_Deviation_MAX = 2
;#Deviation_Temps = 10
#Image_Fond = 1
#Image = 2
#TMR_Flocon = 1
#TMR_Vent = 2
#Vent_Temps_MAX = 10
#Vent_MAX = 1
#Win_Main = 1
Structure FloconStruct
X_Pos.l
Y_Pos.l
Taille.b ;rayon
Couleur.b ;0 = tout blanc, 255 = tout noir
Vitesse.b
Temps.b
EndStructure
Global NewList Flocon.FloconStruct()
ExamineDesktops()
Global Window_Width.l = DesktopWidth(0)
Global Window_Height.l = DesktopHeight(0)
Global ImageFond = CreateImage(#Image_Fond,Window_Width,Window_Height)
Global Image = CreateImage(#Image,Window_Width,Window_Height)
Global Vent.b ;Intensité du vent
Global Vent_Temps.b ;Durée de l'intensité actuelle du vent
Global Vent_Ecoule.b
Procedure Faire_Fond()
H.l
K.l
J.l
Rouge.c
Vert.c
Bleu.c
hDC.l = StartDrawing(ImageOutput(#Image_Fond))
BitBlt_(hDC,0,0,Window_Width,Window_Height,GetDC_(GetDesktopWindow_()),0,0,#SRCCOPY)
For H = 1 To Window_Width
For K = 1 To Window_Height
J = Point(H, K)
Rouge = Red(J)
If (Rouge - #Fonce >= 0) : Rouge - #Fonce
Else : Rouge = 0 : EndIf
Vert = Green(J)
If (Vert - #Fonce >= 0) : Vert - #Fonce
Else : Vert = 0 : EndIf
Bleu = Blue(J)
If (Bleu - #Fonce >= 0) : Bleu - #Fonce
Else : Bleu = 0 : EndIf
Plot(H, K, RGB(Rouge, Vert, Bleu))
Next K
Next H
StopDrawing()
EndProcedure
Procedure CreerFlocon(Debut)
AddElement(Flocon())
Flocon()\X_Pos = Random(Window_Width + 2*#Window_X_Ecartement) - #Window_X_Ecartement
If Debut = 0 :Flocon()\Y_Pos = -10
Else : Flocon()\Y_Pos = - Random(Window_Height) : EndIf
Flocon()\Taille = Random(#Flocon_Taille_MAX) + 1
Flocon()\Couleur = Random(#Flocon_Couleur_MAX)
Flocon()\Vitesse = Random(#Flocon_Vitesse_MAX - #Flocon_Vitesse_MIN) + #Flocon_Vitesse_MIN
;Flocon()\Temps = 0
EndProcedure
Procedure Demarrage()
Faire_Fond()
OpenWindow(#Win_Main,0,0,Window_Width,Window_Height,"",#WS_POPUP)
CreateGadgetList(WindowID(#Win_Main))
ImageGadget(1,0,0,Window_Width,Window_Height,ImageFond)
DisableGadget(1,1)
For I = 1 To #Nbre_Flocons
CreerFlocon(#Vrai)
Next I
SetTimer_(WindowID(#Win_Main), #TMR_Flocon, 10,0)
SetTimer_(WindowID(#Win_Main), #TMR_Vent, 700,0)
EndProcedure
Procedure ActualiserImage()
I.c
StartDrawing(ImageOutput(#Image))
DrawImage(ImageFond,0,0)
ForEach Flocon()
I = 255-Flocon()\Couleur
Circle(Flocon()\X_Pos ,Flocon()\Y_Pos ,Flocon()\Taille , RGB(I, I, I))
Flocon()\X_Pos + Random(#Flocon_Deviation_MAX) - (#Flocon_Deviation_MAX/2) + Vent
Flocon()\Y_Pos + Flocon()\Vitesse
If Flocon()\Y_Pos > Window_Height
DeleteElement(Flocon(),#Vrai)
CreerFlocon(#Faux)
EndIf
Next
StopDrawing()
SetGadgetState(1, Image)
EndProcedure
Procedure ActualiserVent()
Vent_Ecoule + 1
If Vent_Ecoule >= Vent_Temps
;Augmentation / Diminution
Vent_Temps = Random(#Vent_Temps_MAX)
Vent + Random(2* #Vent_MAX) - #Vent_MAX
Vent_Ecoule = 0
EndIf
EndProcedure
Demarrage()
Repeat
Select WaitWindowEvent()
Case #WM_TIMER
Select EventwParam()
Case #TMR_Flocon
ActualiserImage()
Case #TMR_Vent
ActualiserVent()
EndSelect
Case #WM_CHAR
If EventwParam() = 27 : Break : EndIf
Case #PB_Event_CloseWindow : Break
EndSelect
ForEver
End
Merci pour vos réponses, et bon après - midi sous la neige !!
Ajouté par Dobro
édite ce message et regarde les balises employé pour mettre un code !!
([ code] et [/code ])
Merci
