Page 1 sur 2

Le plus éloigné d'un certain nombre de point

Publié : mer. 28/mars/2007 14:43
par Thyphoon
Pour mon jeu j'essaye de simuler la fuite ! (lollll non pas la fuite d'eau.... mais la fuite devant le danger)
J'ai un certain nombre de point qui sont les mechants définit part peur coordonée X, et Y. Ce sont les dangers (on peut dire des mechants)

Et j'ai un autre point (on peut dire le gentil) qui veut s'eloigner un maximum des mechants.

Exemple 1:si les mechants sont en cercle et lui est au milieu alors il se dirige vers le centre.

Exemple 2:Si tout les mechants sont a gauche et que lui est a leur droite , il continue d'avancer a droite...
etc..

Bref j'avais eu l'idée d'additionner les vecteurs entre chaque mechant et le gentil. Pensant que La resultante de ce vecteur me donnera la direction vers ou je dois me dirigier mais mais bon ça ne marche pas terrible

quelqu'un aurait une idée?

Publié : mer. 28/mars/2007 16:35
par ATHOW
Suivant comme tu as implémenté ton jeu, tu peux utiliser un dérivé du min-max :
- Tu testes le déplacement dans toutes les directions, et à chaque "scène" qui en résulte, tu attribues une note correspondant à la somme des distances qui le sépare des ennemis.
- Tu choisis la solution qui a la meilleure note.

Publié : mer. 28/mars/2007 16:46
par Thyphoon
mmmmm oui tres bonne idée ..vraiment une tres bonne idée lollllll
je vais tester ça :P

Publié : jeu. 29/mars/2007 8:00
par Thyphoon
Ton idée était la bonne :)
ça marche tres bien voici un prog vite fait pour simuler la fuite.
Imaginons un lapin dans un champs avec plein de chasseur (Gniark ! Gniark !)

Le lapin c'est le point Rouge ! Les chasseurs les point Vert, et le point Bleu le chasseur selectioné

Les commandes :

[Espace] Le lapin avance d'une case
[Clic Droit] tu retire un obstacle
[Clic Gauche] tu rajoute un obstacle
[TAB] on change de chasseur
[UP] fait monter le chasseur selectionné
[DOWN] fait descendre le chasseur selectionné
[LEFT] le Chasseur va a gauche
[RIGHT] le chasseur va a droite
[ESC] pour Quitter !!

Code : Tout sélectionner

InitSprite()
InitMouse()
InitKeyboard()

#MW=20
#Taille=25

Global Dim Map(#MW,#MW)

Structure p
x.l
y.l
point.f
EndStructure

Global Dim Perso.p(10)  ;Les être vivant s
Global Dim Cases.p(4)   ;Les cases a testé au tout du lapin
Global Nbp.l            ;
Nbp=5   ; Nombre d'être vivant

;Le N°1 c'est le lapin et tout les autres les chasseurs
Perso(1)\x=#MW>>1 ; Lapin au Milieu du champ
Perso(1)\y=#MW>>1

;Je place les chasseurs
For t=2 To Nbp
  Perso(t)\x=Random(#MW-2)+1
  Perso(t)\y=Random(#MW-2)+1
Next

Pselect=2 ;Chasseur selectionné par defaut
Nbpaff=Nbp ;Nombre de perso affiché (pour faire des test avec + ou - de chasseur

;Si on arrive a ouvrir la fenêtre (sinon c'est pas la peine de continuer..:P)
If OpenWindow(0, 0, 0, 800, 600, "La Chasse au Lapin", #PB_Window_ScreenCentered|#PB_Window_SystemMenu)
  OpenWindowedScreen(WindowID(0), 0, 0,800, 600, 0, 0, 0)
 
  Repeat
    
    WEvent = WaitWindowEvent() ; Un Evenement ?!
    
    If WEvent = #PB_Event_CloseWindow
      Quit = #True    
    EndIf
    
    
    ExamineMouse()
    ExamineKeyboard()
    
    ;Chouette on va faire du dessin
    StartDrawing(ScreenOutput())
    
    ;On dessine le cadrillage
    For t=0 To #MW+1
      Line(0,t*#Taille,(#MW+1)*#Taille,0,RGB(255,255,255))
      Line(t*#Taille,0,0,(#MW+1)*#Taille,RGB(255,255,255))
    Next
    
    ;On dessine les obstacle si il y en a
    For zx=0 To #MW
      For zy=0 To #MW
        If map(zx,zy)=1
          Box(zx*#Taille+1,zy*#Taille+1,#Taille-2,#Taille-2,RGB(255,255,255))
        EndIf  
      Next zy
    Next zx
    
    ;Un petit mode pour que le fond du texte sois transparent  
    DrawingMode(#PB_2DDrawing_Transparent)
    
        ;Je dessine tout les perso a l'ecran  
    For t=1 To Nbpaff;Nbp
      If t=1:col=#Red:Else:col=#Green:EndIf
      If t=Pselect:col=#Blue:EndIf
      Circle(Perso(t)\x*#Taille+#Taille>>1,Perso(t)\y*#Taille+#Taille>>1,#Taille>>1,col)
    Next
    
    ;Allez on test les cases au tour du lapin
    For pf=1 To 4
      Select pf
          Case 1 ; La case a droite
           Cases(pf)\x=Perso(1)\x+1
           Cases(pf)\y=Perso(1)\y
           Cases(pf)\point=0
          Case 2 ; La case en bas
           Cases(pf)\x=Perso(1)\x
           Cases(pf)\y=Perso(1)\y+1
           Cases(pf)\point=0
          Case 3 ; La case a gauche
           Cases(pf)\x=Perso(1)\x-1
           Cases(pf)\y=Perso(1)\y
           Cases(pf)\point=0
          Case 4 ; la case en haut
           Cases(pf)\x=Perso(1)\x
           Cases(pf)\y=Perso(1)\y-1
           Cases(pf)\point=0
        EndSelect
        
        ;Un petit test pour être sur que le lapin ne sort pas du champ ..
        If Cases(pf)\x<0 Or Cases(pf)\x>#MW Or Cases(pf)\y<0 Or Cases(pf)\y>#MW
          Cases(pf)\x=Perso(1)\x
          Cases(pf)\y=Perso(1)\y
        EndIf
        
        ;Si il n'y a pas d'obstacle alors on calcul le coef de danger 
        If  Map(Cases(pf)\x,Cases(pf)\y)=0
          ;On trace une case grise pour dire que cette case est testé
          Box(Cases(pf)\x*#Taille+1,Cases(pf)\y*#Taille+1,#Taille-2,#Taille-2,RGB(60,60,60))
          ;On trouve le gars le plus loin
         
          Vx=0 ;
          Vy=0 ;
          ;On additionne le danger que represente chaque chasseur
          For p=2 To Nbpaff; Nbp
            Vx=(Cases(pf)\x-Perso(p)\x)
            Vy=(Cases(pf)\y-Perso(p)\y)
            TV=Sqr(Vx*Vx+Vy*Vy)
            If TV<Cases(pf)\point Or Cases(pf)\point=0
              Cases(pf)\point=TV
            EndIf
          Next
          ;On affiche le coef de la case
          DrawText(Cases(pf)\x*#Taille+5,Cases(pf)\y*#Taille+5,Str(Cases(pf)\point),RGB(255,255,255))
        EndIf
    Next pf  
    

    
    ;Le lapin passe a la case suivante  
    If KeyboardPushed(#PB_Key_Space) And ElapsedMilliseconds()>waitkey
       ;On selectionne la case qui a le Coef le moins elevé
       Point=-1
       n=0
       For pf=1 To 4
         tp=Cases(pf)\point
         If tp>Point Or Point=-1
           Point=tp
           n=pf
         ElseIf tp=Point And pf=Memn ;Random(1)=1
          n=pf
         EndIf
       Next
       Memn=n
       ;si on a bien une case alors le lapin vas sur cette case
       If n>0
         Perso(1)\x=Cases(n)\x
         Perso(1)\y=Cases(n)\y
       EndIf
       waitkey= ElapsedMilliseconds()+500
     EndIf
    
    ;Pour diminuer le nombre de chasseur
    If KeyboardPushed(#PB_Key_Subtract) And ElapsedMilliseconds()>waitkey
      Nbpaff-1
      If Nbpaff<2:Nbpaff=2:EndIf
      waitkey= ElapsedMilliseconds()+500
    EndIf
      
    ;POur augmenter le nombre de chasseur
    If KeyboardPushed(#PB_Key_Add) And ElapsedMilliseconds()>waitkey
      Nbpaff+1
      If Nbpaff>Nbp:Nbpaff=Nbp:EndIf
      waitkey= ElapsedMilliseconds()+500
    EndIf
    
    ;POur selectionner le chasseur suivant 
    If KeyboardPushed(#PB_Key_Tab) And ElapsedMilliseconds()>waitkey
      Pselect+1
      If Pselect>Nbp:Pselect=2:EndIf
      waitkey= ElapsedMilliseconds()+500
    EndIf
     
    ;Le chasseur selectioné monte
    If KeyboardPushed(#PB_Key_Up) And ElapsedMilliseconds()>waitkey
      Perso(Pselect)\y-1
      waitkey= ElapsedMilliseconds()+500
    EndIf
      
    ;Le chasseur selectionné descent
    If KeyboardPushed(#PB_Key_Down) And ElapsedMilliseconds()>waitkey
      Perso(Pselect)\y+1
      waitkey= ElapsedMilliseconds()+500
    EndIf
      
    ;Le chasseur selectionné va a gauche  
    If KeyboardPushed(#PB_Key_Left) And ElapsedMilliseconds()>waitkey
      Perso(Pselect)\x-1
      waitkey= ElapsedMilliseconds()+500
    EndIf
    
    ;Le chasseur va a droite  
    If KeyboardPushed(#PB_Key_Right) And ElapsedMilliseconds()>waitkey
      Perso(Pselect)\x+1
      waitkey= ElapsedMilliseconds()+500
    EndIf
      
    ;On efface un obstacle
    If MouseButton(#PB_MouseButton_Right)  And MouseX()<#MW*#Taille And MouseY()<#MW*#Taille
      Map(Int(MouseX()/#Taille),Int(MouseY()/#Taille))=0
    EndIf
      
    ;On rajoute un obstacle  
    If MouseButton(#PB_MouseButton_Left) And MouseX()<#MW*#Taille And MouseY()<#MW*#Taille
      Map(Int(MouseX()/#Taille),Int(MouseY()/#Taille))=1
    EndIf
    
    ;Un petit curseur pour la souris ... :P 
    Line(MouseX(),MouseY(),16,0,#Red)
    Line(MouseX(),MouseY(),0,16,#Red)
    
    ;On affiche le text
    DrawText(#MW*#Taille+#Taille,20,"[Espace] Le lapin avance d'une case",RGB(255,200,200))
    DrawText(#MW*#Taille+#Taille,40,"[Clic Droit] tu retire un obstacle",RGB(255,200,200))
    DrawText(#MW*#Taille+#Taille,60,"[Clic Gauche] tu rajoute un obstacle",RGB(255,200,200))
    DrawText(#MW*#Taille+#Taille,80,"[TAB] on change de chasseur",RGB(255,200,200))
    DrawText(#MW*#Taille+#Taille,100,"[UP] fait monter le chasseur selectionné",RGB(255,200,200))
    DrawText(#MW*#Taille+#Taille,120,"[DOWN] fait descendre le chasseur selectionné",RGB(255,200,200))
    DrawText(#MW*#Taille+#Taille,140,"[LEFT] le Chasseur va a gauche",RGB(255,200,200))
    DrawText(#MW*#Taille+#Taille,160,"[RIGHT] le chasseur va a droite",RGB(255,200,200))
    DrawText(#MW*#Taille+#Taille,180,"[ESC] pour Quitter !!",RGB(255,200,200)) 
    
    
    StopDrawing() ;On a finit de dessiner 
    FlipBuffers() ;On affiche l'image
    ClearScreen(0) ; Et on efface le buffer pour travailler sur une page toute prore :oP
    
    Delay(10);On laisse un peu de temps libre pour les autres
    
  Until Quit = #True Or KeyboardPushed(#PB_Key_Escape) 
  ;On quitte alors on fait ça bien on verme la fenêtre
  CloseWindow(0)
EndIf
Le code peut être améliorer et optimisé, mais ce n'était pas mon but premier. J'ai essayé de commenté un maximum pour que tout le monde comprenne !

Voilà ! Merci a ceux qui m'on lu et merci a ATHOW pour cette idée que j'aurais du avoir avant lui ! hi hi ! :D

Publié : jeu. 29/mars/2007 17:16
par Thyphoon
Je viens de modifier le code sur mon message au dessus ! Je n'avais pas copier le bon . Désolé :P
Donc maintenant ça marche bien ! :)

J'ai Paufiner ma technique et c'est déjà mieux...

Publié : jeu. 29/mars/2007 18:42
par minirop
constante not found "red"

Publié : jeu. 29/mars/2007 18:48
par Flype
c'est parceque tu as la version démo (encore).

ces constantes sont des constantes Win32 - donc bloqué par la version démo.

donc remplace les #Red, #Blue, ... par leur équivalent.

une composante couleur étant représentée par $BBGGRR

#Red = $0000FF
#Green = $00FF00
#Blue = $FF0000

ou avec la fonction RGB(r, g, b)


Red = RGB(255, 0, 0)
Green = RGB(0, 255, 0)
Blue = RGB(0, 0, 255)

Publié : jeu. 29/mars/2007 19:58
par minirop
Flype a écrit :c'est parceque tu as la version démo (encore).

ces constantes sont des constantes Win32 - donc bloqué par la version démo.
non, sous nunux :p
Flype a écrit :ou avec la fonction RGB(r, g, b)
#Red = RGB(255, 0, 0) marche pas

avec la valeur héxa çà marche mais çà fait planter mon PC (freeze)

Publié : jeu. 29/mars/2007 20:06
par Thyphoon
#red=255
ça devrait marché !! :)

Publié : jeu. 29/mars/2007 23:53
par Flype
sous linux, ah ok.
minirop a écrit :
Flype a écrit :ou avec la fonction RGB(r, g, b)
#Red = RGB(255, 0, 0) marche pas
j'ai bien écris Red = RGB(255, 0, 0) et non pas #Red = RGB(255, 0, 0)
minirop a écrit :avec la valeur héxa çà marche mais çà fait planter mon PC (freeze)
ca par contre c'est bizarre.

Publié : ven. 30/mars/2007 16:08
par _Slide_
Si tu mets un chasseur juste en dessous de ton lapin, alors ton lapin se suicide et lui fonce dessus.
C'est normal ?

Publié : ven. 30/mars/2007 16:17
par Thyphoon
oui c'était le problème avec ma première version du code... mais avec la version qui est actuellement ça ne devrait pas le faire ! Tu as bien testé avec le code actuel ?

Publié : ven. 30/mars/2007 17:26
par _Slide_
Oui, mets un chasseur tout juste en dessous, collé donc, et presses espace pendant qq secondes.

Publié : ven. 30/mars/2007 18:16
par Thyphoon
A oui c'est currieux ça ! lollllllll Faut que je regarde ça de plus prêt lolllllllllll
Tu as raison le lapin sent que sont heure est venu et se suicide.... lolllllllll
Bon ba je vais remettre la tête dedans alors :wink:

Publié : ven. 30/mars/2007 19:32
par Thyphoon
Voilà c'est corrigé ! donc _Slide_ si tu trouves un autre bug n'hesite pas !!! :o)

Code : Tout sélectionner

InitSprite()
InitMouse()
InitKeyboard()

#MW=20
#Taille=25

Global Dim Map(#MW,#MW)

Structure p
x.l
y.l
point.f
EndStructure


Global Dim Perso.p(10)  ;Les être vivant s
Global Dim Cases.p(4)   ;Les cases a testé au tout du lapin
Global Nbp.l            ;
Nbp=5   ; Nombre d'être vivant

;Le N°1 c'est le lapin et tout les autres les chasseurs
Perso(1)\x=#MW>>1 ; Lapin au Milieu du champ
Perso(1)\y=#MW>>1

;Je place les chasseurs
For t=2 To Nbp
  Perso(t)\x=Random(#MW-2)+1
  Perso(t)\y=Random(#MW-2)+1
Next

Pselect=2 ;Chasseur selectionné par defaut
Nbpaff=Nbp ;Nombre de perso affiché (pour faire des test avec + ou - de chasseur

;Si on arrive a ouvrir la fenêtre (sinon c'est pas la peine de continuer..:P)
If OpenWindow(0, 0, 0, 800, 600, "La Chasse au Lapin", #PB_Window_ScreenCentered|#PB_Window_SystemMenu)
  OpenWindowedScreen(WindowID(0), 0, 0,800, 600, 0, 0, 0)
 
  Repeat
   
    WEvent = WaitWindowEvent() ; Un Evenement ?!
   
    If WEvent = #PB_Event_CloseWindow
      Quit = #True   
    EndIf
   
   
    ExamineMouse()
    ExamineKeyboard()
   
    ;Chouette on va faire du dessin
    StartDrawing(ScreenOutput())
   
    ;On dessine le cadrillage
    For t=0 To #MW+1
      Line(0,t*#Taille,(#MW+1)*#Taille,0,RGB(255,255,255))
      Line(t*#Taille,0,0,(#MW+1)*#Taille,RGB(255,255,255))
    Next
   
    ;On dessine les obstacle si il y en a
    For zx=0 To #MW
      For zy=0 To #MW
        If map(zx,zy)=1
          Box(zx*#Taille+1,zy*#Taille+1,#Taille-2,#Taille-2,RGB(255,255,255))
        EndIf 
      Next zy
    Next zx
   
    ;Un petit mode pour que le fond du texte sois transparent 
    DrawingMode(#PB_2DDrawing_Transparent)
   
        ;Je dessine tout les perso a l'ecran 
    For t=1 To Nbpaff;Nbp
      If t=1:col=#Red:Else:col=#Green:EndIf
      If t=Pselect:col=#Blue:EndIf
      Circle(Perso(t)\x*#Taille+#Taille>>1,Perso(t)\y*#Taille+#Taille>>1,#Taille>>1,col)
    Next
   
    ;Allez on test les cases au tour du lapin
    For pf=1 To 4
      Select pf
          Case 1 ; La case a droite
           Cases(pf)\x=Perso(1)\x+1
           Cases(pf)\y=Perso(1)\y
           
          Case 2 ; La case en bas
           Cases(pf)\x=Perso(1)\x
           Cases(pf)\y=Perso(1)\y+1

          Case 3 ; La case a gauche
           Cases(pf)\x=Perso(1)\x-1
           Cases(pf)\y=Perso(1)\y

          Case 4 ; la case en haut
           Cases(pf)\x=Perso(1)\x
           Cases(pf)\y=Perso(1)\y-1

        EndSelect
       Cases(pf)\point=-1
        ;Un petit test pour être sur que le lapin ne sort pas du champ ..
        If Cases(pf)\x<0 Or Cases(pf)\x>#MW Or Cases(pf)\y<0 Or Cases(pf)\y>#MW
          Cases(pf)\x=Perso(1)\x
          Cases(pf)\y=Perso(1)\y
        EndIf
       
        ;Si il n'y a pas d'obstacle alors on calcul le coef de danger
        If  Map(Cases(pf)\x,Cases(pf)\y)=0
          ;On trace une case grise pour dire que cette case est testé
          Box(Cases(pf)\x*#Taille+1,Cases(pf)\y*#Taille+1,#Taille-2,#Taille-2,RGB(60,60,60))
          ;On trouve le gars le plus loin
         
          Vx=0 ;
          Vy=0 ;
          ;On trouve le le perso le plus dangereux !
          For p=2 To Nbpaff; Nbp
            Vx=(Cases(pf)\x-Perso(p)\x)
            Vy=(Cases(pf)\y-Perso(p)\y)
            TV=Sqr(Vx*Vx+Vy*Vy)
            If TV<Cases(pf)\point Or Cases(pf)\point=-1
              Cases(pf)\point=TV
            EndIf
          Next
          ;On affiche le coef de la case
          DrawText(Cases(pf)\x*#Taille+5,Cases(pf)\y*#Taille+5,Str(Cases(pf)\point),RGB(255,255,255))
        EndIf
    Next pf 
   

   
    ;Le lapin passe a la case suivante 
    If KeyboardPushed(#PB_Key_Space) And ElapsedMilliseconds()>waitkey
       ;On selectionne la case qui a le Coef le moins elevé
       Point=-1
       n=0
       For pf=1 To 4
         tp=Cases(pf)\point
         If tp>Point Or Point=-1
           Point=tp
           n=pf
         ElseIf tp=Point And pf=Memn ;Random(1)=1
          n=pf
         EndIf
       Next
       Memn=n
       ;si on a bien une case alors le lapin vas sur cette case
       If n>0
         Perso(1)\x=Cases(n)\x
         Perso(1)\y=Cases(n)\y
       EndIf
       waitkey= ElapsedMilliseconds()+500
     EndIf
   
    ;Pour diminuer le nombre de chasseur
    If KeyboardPushed(#PB_Key_Subtract) And ElapsedMilliseconds()>waitkey
      Nbpaff-1
      If Nbpaff<2:Nbpaff=2:EndIf
      waitkey= ElapsedMilliseconds()+500
    EndIf
     
    ;POur augmenter le nombre de chasseur
    If KeyboardPushed(#PB_Key_Add) And ElapsedMilliseconds()>waitkey
      Nbpaff+1
      If Nbpaff>Nbp:Nbpaff=Nbp:EndIf
      waitkey= ElapsedMilliseconds()+500
    EndIf
   
    ;POur selectionner le chasseur suivant
    If KeyboardPushed(#PB_Key_Tab) And ElapsedMilliseconds()>waitkey
      Pselect+1
      If Pselect>Nbp:Pselect=2:EndIf
      waitkey= ElapsedMilliseconds()+500
    EndIf
     
    ;Le chasseur selectioné monte
    If KeyboardPushed(#PB_Key_Up) And ElapsedMilliseconds()>waitkey
      Perso(Pselect)\y-1
      waitkey= ElapsedMilliseconds()+500
    EndIf
     
    ;Le chasseur selectionné descent
    If KeyboardPushed(#PB_Key_Down) And ElapsedMilliseconds()>waitkey
      Perso(Pselect)\y+1
      waitkey= ElapsedMilliseconds()+500
    EndIf
     
    ;Le chasseur selectionné va a gauche 
    If KeyboardPushed(#PB_Key_Left) And ElapsedMilliseconds()>waitkey
      Perso(Pselect)\x-1
      waitkey= ElapsedMilliseconds()+500
    EndIf
   
    ;Le chasseur va a droite 
    If KeyboardPushed(#PB_Key_Right) And ElapsedMilliseconds()>waitkey
      Perso(Pselect)\x+1
      waitkey= ElapsedMilliseconds()+500
    EndIf
     
    ;On efface un obstacle
    If MouseButton(#PB_MouseButton_Right)  And MouseX()<#MW*#Taille And MouseY()<#MW*#Taille
      Map(Int(MouseX()/#Taille),Int(MouseY()/#Taille))=0
    EndIf
     
    ;On rajoute un obstacle 
    If MouseButton(#PB_MouseButton_Left) And MouseX()<#MW*#Taille And MouseY()<#MW*#Taille
      Map(Int(MouseX()/#Taille),Int(MouseY()/#Taille))=1
    EndIf
   
    ;Un petit curseur pour la souris ... :P
    Line(MouseX(),MouseY(),16,0,#Red)
    Line(MouseX(),MouseY(),0,16,#Red)
   
    ;On affiche le text
    DrawText(#MW*#Taille+#Taille,20,"[Espace] Le lapin avance d'une case",RGB(255,200,200))
    DrawText(#MW*#Taille+#Taille,40,"[Clic Droit] tu retire un obstacle",RGB(255,200,200))
    DrawText(#MW*#Taille+#Taille,60,"[Clic Gauche] tu rajoute un obstacle",RGB(255,200,200))
    DrawText(#MW*#Taille+#Taille,80,"[TAB] on change de chasseur",RGB(255,200,200))
    DrawText(#MW*#Taille+#Taille,100,"[UP] fait monter le chasseur selectionné",RGB(255,200,200))
    DrawText(#MW*#Taille+#Taille,120,"[DOWN] fait descendre le chasseur selectionné",RGB(255,200,200))
    DrawText(#MW*#Taille+#Taille,140,"[LEFT] le Chasseur va a gauche",RGB(255,200,200))
    DrawText(#MW*#Taille+#Taille,160,"[RIGHT] le chasseur va a droite",RGB(255,200,200))
    DrawText(#MW*#Taille+#Taille,180,"[ESC] pour Quitter !!",RGB(255,200,200))
   
   
    StopDrawing() ;On a finit de dessiner
    FlipBuffers() ;On affiche l'image
    ClearScreen(0) ; Et on efface le buffer pour travailler sur une page toute prore :oP
   
    Delay(10);On laisse un peu de temps libre pour les autres
   
  Until Quit = #True Or KeyboardPushed(#PB_Key_Escape)
  ;On quitte alors on fait ça bien on verme la fenêtre
  CloseWindow(0)
EndIf