Un petit code tout simple mais qui peut servir alors je le poste !
C'est l'occasion de voir que le clearscreen() est à éviter (saccades!).
Code : Tout sélectionner
;Le pendule simple
;auteur Huitbit
;PureBasic 4.30 (Windows - x86)
;*********************************
#largeur_ecran=600
#hauteur_ecran=600
#sprite_laboratoire=0
#sprite_boule=1
#rayon_boule=16
;-CONDITIONS INITIALES
#longueur_fil=#largeur_ecran*0.6
angle.f=45*#PI/180
vitesse_angulaire.f=0
#g=9.8
#dt=0.2
;-PROGRAMME PRINCIPAL
InitSprite()
InitKeyboard()
OpenWindow(0,0,0,#largeur_ecran,#hauteur_ecran,"Le pendule simple",#PB_Window_ScreenCentered|#PB_Window_SystemMenu )
OpenWindowedScreen(WindowID(0),0,0,#largeur_ecran,#hauteur_ecran,0,0,0)
;-dessin du décor
CreateSprite(#sprite_laboratoire,#largeur_ecran,#hauteur_ecran)
StartDrawing(SpriteOutput(#sprite_laboratoire))
For i=0 To #largeur_ecran Step 8 ; caractère de largeur 8 pixels
For j=0 To #hauteur_ecran Step 16 ; caractère de hauteur 16 pixels
DrawText(i,j,Str(Random(1)),RGB(0,64,0),RGB(0,32,0))
Next j
Next i
StopDrawing()
;-dessin de la boule
CreateSprite(#sprite_boule,2*#rayon_boule,2*#rayon_boule)
StartDrawing(SpriteOutput(#sprite_boule))
Circle(#rayon_boule,#rayon_boule,#rayon_boule,RGB(100,100,255))
StopDrawing()
;-BOUCLE PRINCIPALE
Repeat
FlipBuffers()
;-EQUATIONS DU MOUVEMENT
vitesse_angulaire=vitesse_angulaire-#g/#longueur_fil*Sin(angle)*#dt
angle=angle+vitesse_angulaire*#dt
;-AFFICHAGE
;-décor
DisplaySprite(#sprite_laboratoire,0,0)
;-fil
StartDrawing(ScreenOutput())
LineXY(#largeur_ecran*0.5,0,#largeur_ecran*0.5+#longueur_fil*Sin(angle),#longueur_fil*Cos(angle),RGB(255,255,255))
StopDrawing()
;-boule
DisplayTransparentSprite(#sprite_boule,#largeur_ecran*0.5+#longueur_fil*Sin(angle)-#rayon_boule,#longueur_fil*Cos(angle)-#rayon_boule)
Repeat
Event = WindowEvent()
If Event = #PB_Event_CloseWindow
End
EndIf
Until Event = 0
Delay(1)
ForEver