Petit programme sprites : bougie animée

Partagez votre expérience de PureBasic avec les autres utilisateurs.
fweil
Messages : 505
Inscription : dim. 16/mai/2004 17:50
Localisation : Bayonne (64)
Contact :

Petit programme sprites : bougie animée

Message par fweil »

Bon y a pas beaucoup de commentaires, mais c'est codé / nommé proprement.

La prochaine fois je vous sors un prog écrit avec la version française du langage PureBasic, qui cause complètement français ...

Code : Tout sélectionner

;
; Simple sample Candle app.pb
; Version FR
;
; Utilise les sprites pour modéliser une petite animation de bougies allumées.
;
; FWeil 20040519
;
; A noter la procédure Label, qui permet de simplfier l'écriture des textes 2D dans le programme principal.
;
Enumeration 1
  #Sprite3D1
  #Fenetre_principale
  #Barre_de_status
  #Gadget_Bouton_CliquezMoi
  #Sprite1
  #Image_Couleur_de_fond
EndEnumeration

#FAUX = #FALSE ; Pour la VF ... na !
#VRAI = #TRUE
#FW_Police_Ombre = 1024
#FW_Police_Centered = 2048

Procedure Label(Texte.s, Placement_X.l, Placement_Y.l, Police.s, Taille.l, Mode.l, Largeur.l, Hauteur.l, Attributs.l, Couleur_fond, Couleur_avant_plan.l)
;  DrawingFont(LoadFont(#PB_Any, Police, Taille, Attributs))
  DrawingFont(LoadFont(13, Police, Taille, Attributs))
  DrawingMode(Mode)
  If Attributs & #FW_Police_Ombre
      FrontColor(Red(Couleur_fond), Green(Couleur_fond), Blue(Couleur_fond))
      If Attributs & #FW_Police_Centered
          Locate((Largeur - TextLength(Texte)) / 2, Placement_Y)
        Else
          Locate(Placement_X, Placement_Y)
      EndIf
      DrawText(Texte)
      FrontColor(Red(Couleur_avant_plan), Green(Couleur_avant_plan), Blue(Couleur_avant_plan))
      If Attributs & #FW_Police_Centered
          Locate((Largeur - TextLength(Texte)) / 2 + 1, Placement_Y - 1)
        Else
          Locate(Placement_X + 1,  Placement_Y - 1)
      EndIf
      DrawText(Texte)
    Else
      BackColor(Red(Couleur_fond), Green(Couleur_fond), Blue(Couleur_fond))
      FrontColor(Red(Couleur_avant_plan), Green(Couleur_avant_plan), Blue(Couleur_avant_plan))
      If Attributs & #FW_Police_Centered
          Locate((Largeur - TextLength(Texte)) / 2, Placement_Y)
        Else
          Locate(Placement_X, Placement_Y)
      EndIf
      DrawText(Texte)
  EndIf
EndProcedure

;
;
;
  Quitter = #FAUX
  Nombre_de_sprites = 10
  Dim Zoom_facteur(Nombre_de_sprites)
  Dim Zoom(Nombre_de_sprites)
  Dim Angle_facteur(Nombre_de_sprites)
  Dim Angle(Nombre_de_sprites)
  Dim X_facteur(Nombre_de_sprites)
  Dim Y_facteur(Nombre_de_sprites)
  Dim X(Nombre_de_sprites)
  Dim Y(Nombre_de_sprites)
  Dim Transparence(Nombre_de_sprites)
  Fenetre_taille_X = 480
  Fenetre_taille_Y = 360
  Ecran_fenetre_taille_X = 320
  Ecran_fenetre_taille_Y = 240
  For i = 1 To Nombre_de_sprites
    Zoom_facteur(i) = 10
    Angle_facteur(i) = 1
    X_facteur(i) = 1
    Y_facteur(i) = 1
    Zoom(i) = Random(200)
    Angle(i) = Random(360)
    X(i) = Random(Fenetre_taille_X)
    Y(i) = Random(Fenetre_taille_Y)
    Transparence(i) = 100
  Next
  Debut = #VRAI
  If InitSprite() And InitSprite3D() And InitKeyboard() And InitMouse()
      If OpenWindow(#Fenetre_principale, 0, 0, Fenetre_taille_X, Fenetre_taille_Y, #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget | #PB_Window_SizeGadget | #PB_Window_TitleBar | #PB_Window_ScreenCentered, "Petite bougie")
          If CreateGadgetList(WindowID())
              SetGadgetFont(#PB_Default, LoadFont(12, "Arial", 24, #PB_Font_Bold | #PB_Font_Italic | #PB_Font_HighQuality))
              ButtonGadget(#Gadget_Bouton_CliquezMoi, 10, 10, Fenetre_taille_X - 20, 40, "Cliquez moi")
          EndIf
          ID_image_fond = CreateImage(#Image_Couleur_de_fond, Ecran_fenetre_taille_X, Ecran_fenetre_taille_Y)
          StartDrawing(ImageOutput())
            For x = 0 To Ecran_fenetre_taille_X
              LineXY(x, 0, 0, x * Ecran_fenetre_taille_Y / Ecran_fenetre_taille_X, x << 23)
              LineXY(x, Ecran_fenetre_taille_Y, Ecran_fenetre_taille_X, x * Ecran_fenetre_taille_Y / Ecran_fenetre_taille_X, x << 23)
            Next
          StopDrawing()
          hCurseur1 = LoadCursor_(0, #IDC_ARROW)
          hCurseur2 = LoadCursor_(0, #IDC_CROSS)
          AddKeyboardShortcut(#Fenetre_principale, #PB_Shortcut_Escape, #PB_Shortcut_Escape)
          If OpenWindowedScreen(WindowID(), (Fenetre_taille_X - Ecran_fenetre_taille_X) / 2, (Fenetre_taille_Y - Ecran_fenetre_taille_Y - WindowedScreenBottomMargin) / 2, Ecran_fenetre_taille_X, Ecran_fenetre_taille_Y, 0, 0, 0)
              Sprite_largeur = 128
              Sprite_hauteur = 128
              TransparentSpriteColor(-1, 0, 0, $40)
              CreateSprite(#Sprite1, Sprite_largeur, Sprite_hauteur, #PB_Sprite_Texture)
              StartDrawing(SpriteOutput(#Sprite1))
                Box(0, 0, Sprite_largeur, Sprite_hauteur, $400000)
                Label("Petit programme", 0, (Sprite_hauteur - 15) / 2, "Verdana", 9, 1, Sprite_largeur, Sprite_hauteur, #PB_Font_Bold | #PB_Font_Italic | #PB_Font_HighQuality | #FW_Police_Centered, #Black, #White)
                Label("Bougie animée", 0, (Sprite_hauteur + 15) / 2, "Verdana", 9, 1, Sprite_largeur, Sprite_hauteur, #PB_Font_Bold | #PB_Font_Italic | #PB_Font_HighQuality | #FW_Police_Centered, #Black, #White)
                DrawingMode(4)
                Box(0, 0, Sprite_largeur, Sprite_hauteur, $C0FFFF)
              StopDrawing()
              CreateSprite3D(#Sprite3D1, #Sprite1)
              Sprite3DQuality(1)
              Repeat
                Select WindowEvent()
                  Case #PB_Event_CloseWindow
                    Quitter = #VRAI
                  Case #PB_Event_Menu
                    Select EventMenuID()
                      Case #PB_Shortcut_Escape
                        If Debut
                            Debut = #FAUX
                          Else
                            Quitter = #VRAI
                        EndIf
                    EndSelect
                  Case #PB_Event_Gadget
                    Select EventGadgetID()
                      Case #Gadget_Bouton_CliquezMoi
                        If Debut
                            Debut = #FAUX
                            FreeGadget(#Gadget_Bouton_CliquezMoi)
                            ButtonGadget(#Gadget_Bouton_CliquezMoi, 10, 10, Fenetre_taille_X - 20, 40, "Terminer")
                          Else
                            Quitter = #VRAI
                        EndIf
                    EndSelect
                EndSelect
                GetCursorPos_(CursorPosition.POINT) - 20
                Souris_position_X = CursorPosition\x - WindowX()
                Souris_position_Y = CursorPosition\y - WindowY()
                If Souris_position_X >= Fenetre_taille_X - Ecran_fenetre_taille_X And Souris_Postion_x <= Fenetre_taille_Y And Souris_Position_Y >= Fenetre_taille_Y - Ecran_fenetre_taille_Y And Souris_position_Y <= Fenetre_taille_Y
                    SetCursor_(hCurseur2)
                  Else
                    SetCursor_(hCurseur1)
                EndIf
                If Start3D()
                    FlipBuffers()
                    ClearScreen($00, $00, $40)
                    StartDrawing(ScreenOutput())
                      DrawImage(ID_image_fond, 0, 0)
                      If Debut = #FAUX
                          BackColor(0, 0, $40)
                          Label("Petit programme", 0, Ecran_fenetre_taille_Y / 2 + 20, "Verdana", 18, 1, Ecran_fenetre_taille_X, Ecran_fenetre_taille_Y, #PB_Font_Bold | #PB_Font_Italic | #PB_Font_HighQuality| #FW_Police_Ombre | #FW_Police_Centered, $FFFFFF, Couleur)
                          Label("Bougie animée", 0, Ecran_fenetre_taille_Y / 2 + 60, "Verdana", 18, 1, Ecran_fenetre_taille_X, Ecran_fenetre_taille_Y, #PB_Font_Bold | #PB_Font_Italic | #PB_Font_HighQuality | #FW_Police_Ombre | #FW_Police_Centered, $FFFFFF, Couleur)
                          Couleur + 7
                          DrawingMode(0)
                          For i = 2 To -2 Step -1
                            XBougie = Ecran_fenetre_taille_X / 2 + 300 * Sin(i / 4)
                            YBougie = Ecran_fenetre_taille_Y / 2 - 150 * Cos(i / 4) + 30
                            For Bougie = 10 To 0 Step - 2
                              Box(XBougie - Bougie + 5, YBougie + 80, Bougie, 35, RGB(150 + 10 * Bougie, 150 + 10 * Bougie, 150 + 10 * Bougie))
                            Next
                            For Lumiere = 25 To 1 Step -1
                              Circle(XBougie + Random(2) - 1, YBougie + 3* Lumiere + Random(2) - 1, Lumiere / 4, RGB(Lumiere * 10, Lumiere * 6, 0))
                            Next
                          Next
                      EndIf
                    StopDrawing()
                    If Debut
                        For i = 1 To Nombre_de_sprites
                          ZoomSprite3D(#Sprite3D1, Zoom(i), Zoom(i))
                          RotateSprite3D(#Sprite3D1, Angle(i), 0)
                          DisplaySprite3D(#Sprite3D1, X(i), Y(i), Transparence(i))
                          Transparence(i) = Transparence(i) + 1
                          If Transparence(i) > 255
                              Transparence(i) = 200
                          EndIf
                          Zoom(i) + Zoom_facteur(i)
                          If Abs(Zoom(i)) > 256
                              Zoom_facteur(i) = -Zoom_facteur(i)
                          EndIf
                          Angle(i) + Angle_facteur(i)
                          If Angle(i) > 360
                              Angle_facteur(i) = -Angle_facteur(i)
                          EndIf
                          X(i) + X_Facteur(i)
                          Y(i) + Y_Facteur(i)
                          If X(i) > Ecran_fenetre_taille_X Or X(i) < 0
                              X_facteur(i) = -X_facteur(i)
                          EndIf
                          If Y(i) > Ecran_fenetre_taille_Y Or Y(i) < 0
                              Y_facteur(i) = -Y_facteur(i)
                          EndIf
                        Next
                    EndIf
                    Stop3D()
                EndIf
                Delay(25)
              Until Quitter
            Else
              MessageRequester("Erreur", "Ouverture de l'écran fenêtré impossible", 0)
          EndIf
        Else
          MessageRequester("Erreur", "Ouverture de la fenêtre principale impossible", 0)
      EndIf
    Else
      MessageRequester("Erreur", "Démarrage de DirectX impossible", 0)
  EndIf
End
Mon avatar reproduit l'image de 4x1.8m présentée au 'Salon international du meuble de Paris' en janvier 2004, dans l'exposition 'Shades' réunisant 22 créateurs autour de Matt Sindall. L'original est un stratifié en 150 dpi.