[Ok]Petit probleme avec une constante

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Bernie
Messages : 282
Inscription : mar. 22/mars/2016 10:12
Localisation : En France

[Ok]Petit probleme avec une constante

Message par Bernie »

Bonjour
j'ai repris un tuto ( excellent) de Ar/s
Si j’écris les constantes comme ceci :

Code : Tout sélectionner

Enumeration Sprites 
  #Text_Titre
  #Text_Ombre
  #Etoile0
  #Etoile1
EndEnumeration
ça marche pas j'ai un message d'erreur en ligne 85

mais j'ai écris comme ça les constantes ( voir le code en dessous) là ça marche parfaitement .

j'aimerai bien savoir pourquoi quand on rajoute une nouvelle constante aprés voir écris le code , est que qu'il faut la mettre toujours en dessous des autres constantes ?

Merci d'avance pour votre aide
Bernard

Code : Tout sélectionner

;**** Space Shooter ****
;*** Code by JBernard  Mars 2016 ***

EnableExplicit

;--Initialisation--
If InitSprite()=0 Or InitKeyboard()=0
  MessageRequester("Erreur", "Impossible d'initialiser le programme ")
EndIf

;--Constantes--
Enumeration Form
  #Main_Form
EndEnumeration

Enumeration Sprites 
  #Text_Titre
  #Etoile0
  #Etoile1
 #Text_Ombre
EndEnumeration

;--Variable globales
Global gI,gW=800,gH=600,gEventWindow,gFont1,gFont2
;--Nombre d'étoiles 
#MaxEtoiles= 99
;--Chargement de la police pour les textes
gFont1 = LoadFont(0, "Arial", 50, #PB_Font_Bold )

;--Structure pour les infos des étoiles
Structure etoile
  PosX.i
  PosY.i
  Vitesse.i
  Id.b
EndStructure

;--Création d'un tableau pour nos étoiles
Global Dim etoiles.etoile(#MaxEtoiles)

;--Les procédures
Procedure CreateText()
  
  CreateSprite(#Text_Titre,600,100,#PB_Sprite_AlphaBlending) 
  StartDrawing(SpriteOutput(#Text_Titre))
  DrawingMode(#PB_2DDrawing_AllChannels)
  Box(0,0,1090,80,RGBA(0,0,0,0))
  
  DrawingFont(gFont1)
  DrawText(20,10,"SPACE SHOOTER ",RGBA(255,255,255,255), RGBA(0,0,0,0));
  StopDrawing()
EndProcedure

;--On dessine les étoiles
Procedure CreationEtoiles()
  CreateSprite(#Etoile0,2,2)
  CreateSprite(#Etoile1,2,2)
  ;--Dessin de l'étoile blanche 
  StartDrawing(SpriteOutput(#Etoile0))
  Box(0, 0, 2, 2, $FFFFFF)
  StopDrawing()
  ;--Dessin de l'étoile rouge
  StartDrawing(SpriteOutput(#Etoile1))
  Box(0, 0, 2, 2, $0000FF)
  StopDrawing()
EndProcedure  

;-- Initialisation des paramètres de départ des étoiles
Procedure Initialisation()
  With etoiles(gI)
    For gI =0 To #MaxEtoiles
      \PosY = Random(gH)
      \PosX =Random(gW,0)
      \Id = Random(2,1) 
      \Vitesse = Random(8,2)
    Next 
  EndWith  
EndProcedure  



Procedure Deplacement()
  For gI =0 To #MaxEtoiles
    With etoiles(gI)
      DisplaySprite(\id, \PosX, \PosY)
      \PosY + \Vitesse
      If \PosY >=gW
        \PosY -gW
      EndIf
    EndWith
  Next    
EndProcedure   

;--- Création de la fenetre et de l'écran 
OpenWindow(#Main_Form,0,0,gW,gH,"Space Shooters ",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
OpenWindowedScreen(WindowID(#Main_Form),0,0,gW,gH)
CreateText()

CreationEtoiles() 
Initialisation()

;--- Boucle du programme
Repeat  
  Repeat
    gEventWindow=WindowEvent()
    Select gEventWindow
      Case #PB_Event_CloseWindow
        End
    EndSelect
  Until gEventWindow=0
  ClearScreen(RGB(0, 0, 0)) ;En premier 
  
  ;Affichage des sprites 
  DisplayTransparentSprite(#Text_Titre, 100, 150)
  Deplacement()
  
  ExamineKeyboard()
  FlipBuffers()
Until KeyboardReleased(#PB_Key_Escape)
End
Dernière modification par Bernie le sam. 26/mars/2016 10:04, modifié 1 fois.
Avatar de l’utilisateur
Fig
Messages : 1176
Inscription : jeu. 14/oct./2004 19:48

Re: Petit probleme avec une constante

Message par Fig »

bonjour Bernard,

Je me permets de te copier l'exemple de la documentation:

Code : Tout sélectionner

  Enumeration
    #GadgetInfo ; égale à 0
    #GadgetText ; égale à 1
    #GadgetOK   ; égale à 2
  EndEnumeration
Comme tu le vois, l'ordre est important car à chaque constante on affecte une valeur, en l'occurrence, la première 0 la seconde 1 etc...
Donc si tu change l'ordre, le programme rencontre un problème en se servant des mauvaises valeurs pour ces constantes.

Si tu fais ça:

Code : Tout sélectionner

  Enumeration
    #GadgetInfo ; égale à 0
    #GadgetOK   ; égale à 1 (et non 2 comme précédemment)
    #GadgetText ; égale à 2 (et non 1 comme précédemment)
  EndEnumeration
C'est clair ?
Il y a deux méthodes pour écrire des programmes sans erreurs. Mais il n’y a que la troisième qui marche.
Version de PB : 6.00LTS - 64 bits
Bernie
Messages : 282
Inscription : mar. 22/mars/2016 10:12
Localisation : En France

Re: Petit probleme avec une constante

Message par Bernie »

Merci Fig
si j'ai bien compris si je veux rajouter une nouvelle constante une fois le code finie je la mets à la suite de l'autre .
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Petit probleme avec une constante

Message par Ar-S »

Bernie a écrit :Merci Fig
si j'ai bien compris si je veux rajouter une nouvelle constante une fois le code finie je la mets à la suite de l'autre .
Du moment ou tu utilises les numéros des enumérations dans ton code la réponse est oui.
~~~~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
microdevweb
Messages : 1802
Inscription : mer. 29/juin/2011 14:11
Localisation : Belgique

Re: Petit probleme avec une constante

Message par microdevweb »

@Bernie,

Pour pouvoir reprendre une énumération à divers endroits du programme il faut la faire précédé d'un label

Exemple:

Code : Tout sélectionner

Enumeration Gadget
    #Gdg0
    #Gdg1
    #Gdg2
    #Gdg3
EndEnumeration
; Ici je reprend les énumération
Enumeration Gadget
    #Gdg4
EndEnumeration
Debug "Valeur #Gdg4  = "+Str(#Gdg4)
; La par contre je reprend une nouvelle énumération
Enumeration 
    #Gdg5
EndEnumeration
Debug "Valeur #Gdg5   ="+Str(#Gdg5)
Windows 10 64 bits PB: 5.70 ; 5.72 LST
Work at Centre Spatial de Liège
Bernie
Messages : 282
Inscription : mar. 22/mars/2016 10:12
Localisation : En France

Re: [Ok]Petit probleme avec une constante

Message par Bernie »

Merci microdevweb pour ton explication
Répondre