Page 1 sur 1

Serpent de boule

Publié : ven. 20/août/2004 12:23
par Le Soldat Inconnu
Un petit serpent constitué de boules qui se suivent

Code : Tout sélectionner

; Auteur : Le Soldat Inconnu
; Version de PB : 3.90
; 
; Explication du programme :
; Dessiner un serpent de boule qui suit la souris

; Dimension du screen
#EcranX = 1024
#EcranY= 768

#NbBoule = 100 ; Nombre de boule
#RayonBoule = 17 ; diamètre des boules

#Vitesse.f = 0.2 ; Vitesse de déplacement des boules

Structure BouleInfo ; Contient la position de chaque boule
  x.f
  y.f
EndStructure
Dim Boule.BouleInfo(#NbBoule)

Procedure DessineBoule(ID, Couleur)
  ; ID : Identifiant du sprite
  ; Couleur : Couleur RGB de la boule

  CreateSprite(ID, #RayonBoule * 2 + 1, #RayonBoule * 2 + 1)
  StartDrawing(SpriteOutput(ID))
    Circle(#RayonBoule, #RayonBoule, #RayonBoule, Couleur) ; On dessine une boule
  StopDrawing()
  
EndProcedure


InitSprite()
InitKeyboard()
InitMouse()
OpenScreen(#EcranX, #EcranY, 32, "")

; On crée les sprites qui représentent des boules de couleur de plus en plus claires
For n = 0 To #NbBoule
  Coef.f = n / #NbBoule
  DessineBoule(n, RGB(255, 165 + (255 - 165) * Coef, 255 * Coef))
Next

; On place la souris au point de départ
MouseLocate(#RayonBoule, #RayonBoule)

Repeat
  ExamineMouse()
  ExamineKeyboard()
  
  ClearScreen(0, 0, 0) ; On efface l'écran
  
  ; Position de la première boule que l'on calcule avec la souris
  ; Il s'agit de la boule 0
  Boule(0)\x = MouseX() - #RayonBoule
  Boule(0)\y = MouseY() - #RayonBoule
  
  For n = #NbBoule To 1 Step -1 ; Pour chaque boule
    ; On part de la fin afin que la dernière boule soit en dessous des autres
  
    ; On calcul la vitesse de déplacement en x de la boule à partir de la distance entre cette boule et la précédente
    ; Le but est de permettre à cette boule de suivre la précédente
    ; Et plus la distance entre ces 2 boules est grande et plus elle ira vite pour la rattraper
    VitesseX.f = (Boule(n - 1)\x - Boule(n)\x) * #Vitesse
    
    ; De même sur les y
    VitesseY.f = (Boule(n - 1)\y - Boule(n)\y) * #Vitesse
    
    ; On détermine la nouvelle position de la boule
    Boule(n)\x + VitesseX
    Boule(n)\y + VitesseY
    
    ; On affiche la boule
    DisplayTransparentSprite(n, Boule(n)\x, Boule(n)\y)
    
  Next
  
  DisplayTransparentSprite(0, Boule(0)\x, Boule(0)\y) ; On affiche la boule qui représente la souris
  ; Elle est affiché en dernier pour être au dessus des autres
  
  FlipBuffers()
  
Until KeyboardPushed(#PB_Key_Escape)

Publié : ven. 20/août/2004 14:03
par Oliv
8O 8O 8O c'est tout beau ça 8O

Publié : ven. 20/août/2004 14:35
par fweil
@Le Soldat Inconnu,

Top ! M'a foutu les boules !

Une idée m'est venue : pourquoi pas reprendre le principe de Snake avec une version comme ça ?

Alors voila ce que je me suis amusé à faire en 1/4h :

Code : Tout sélectionner

; Auteur : Le Soldat Inconnu 
; Version de PB : 3.90 
; 
; Explication du programme : 
; Dessiner un serpent de boule qui suit la souris 
;
;  Modifs fweil 20040820
; Modifié le prog pour faire nu serpent dont la longueur croit avec le temps, en utilisant #NbBoule comme longueur max
; Un score est calculé en utilisant la distance parcourue par la souris dans l'écran et en déduisant les collisions entre les boules du serpent.
; La loi de collision est basée sur une collision entre deux boules distantes au moins de dix positions dans le serpent (sinon se serait injouable)
; Telle quelle cette loi oblige à étirer le serpent avec des mouvements assez rapides pour éviter le tassement des boules (sinon le compteur de collisions
; diminue le score), mais pas trop pour éviter de se faire piéger quand le serpent devient long (ce qui risque d'obliger à faire des boucles qui font
; aussi perdre des points)
;
; Dimension du screen 
#EcranX = 1024 
#EcranY= 768 
#NbBoule = 100 ; Nombre de boule 
#RayonBoule = 17 ; diamètre des boules 
#Vitesse.f = 0.2 ; Vitesse de déplacement des boules 

Structure BouleInfo ; Contient la position de chaque boule 
  x.f 
  y.f 
EndStructure 
Dim Boule.BouleInfo(#NbBoule) 

Procedure DessineBoule(ID, Couleur) 
  ; ID : Identifiant du sprite 
  ; Couleur : Couleur RGB de la boule 
  CreateSprite(ID, #RayonBoule * 2 + 1, #RayonBoule * 2 + 1) 
  StartDrawing(SpriteOutput(ID)) 
    Circle(#RayonBoule, #RayonBoule, #RayonBoule, Couleur) ; On dessine une boule 
  StopDrawing() 
EndProcedure 


InitSprite() 
InitKeyboard() 
InitMouse() 
OpenScreen(#EcranX, #EcranY, 32, "") 
; On crée les sprites qui représentent des boules de couleur de plus en plus claires 
Score = 0
For n = 0 To #NbBoule 
  Coef.f = n / #NbBoule 
  DessineBoule(n, RGB(255, 165 + (255 - 165) * Coef, 255 * Coef)) 
Next 
; On place la souris au point de départ 
MouseLocate(#RayonBoule, #RayonBoule) 
NBoule = 0
Repeat 
  ExamineMouse() 
  ExamineKeyboard() 
  FlipBuffers() 
  ClearScreen(0, 0, 0) ; On efface l'écran 
  ; Position de la première boule que l'on calcule avec la souris 
  ; Il s'agit de la boule 0 
  Boule(0)\x = MouseX() - #RayonBoule 
  Boule(0)\y = MouseY() - #RayonBoule 
  Collisions = 0
  For n = NBoule To 1 Step -1 ; Pour chaque boule 
    ; On part de la fin afin que la dernière boule soit en dessous des autres 
    ; On calcul la vitesse de déplacement en x de la boule à partir de la distance entre cette boule et la précédente 
    ; Le but est de permettre à cette boule de suivre la précédente 
    ; Et plus la distance entre ces 2 boules est grande et plus elle ira vite pour la rattraper 
    VitesseX.f = (Boule(n - 1)\x - Boule(n)\x) * #Vitesse 
    ; De même sur les y 
    VitesseY.f = (Boule(n - 1)\y - Boule(n)\y) * #Vitesse 
    ; On détermine la nouvelle position de la boule 
    Boule(n)\x + VitesseX 
    Boule(n)\y + VitesseY 
    ; On affiche la boule 
    DisplayTransparentSprite(n, Boule(n)\x, Boule(n)\y)
    For n1 = 1 To NBoule
      If SpriteCollision(n1, Boule(n1)\x, Boule(n1)\y, n, Boule(n)\x, Boule(n)\y) And n - n1 > 10
          Collisions + 1
      EndIf
    Next
  Next
  DisplayTransparentSprite(0, Boule(0)\x, Boule(0)\y) ; On affiche la boule qui représente la souris
  DX = Boule(0)\x - OldX
  DY = Boule(0)\y - OldY
  Score + Sqr(DX * DX + DY * DY) - Collisions
  OldX = Boule(0)\x
  OldY = Boule(0)\y
  ; Elle est affiché en dernier pour être au dessus des autres 
  If NBoule < #NbBoule And ElapsedMilliseconds() - tz => 1000 : NBoule + 1 : tz = ElapsedMilliseconds() : Boule(NBoule)\x = Boule(NBoule - 1)\x : Boule(NBoule)\y = Boule(NBoule - 1)\y : EndIf
  StartDrawing(ScreenOutput())
    DrawingMode(1)
    BackColor(0, 0, 0)
    FrontColor(255, 255, 255)
    If Collisions > 0
        Locate(10, 10)
        DrawText("Collision")
    EndIf
    Locate(10, 30)
    DrawText(Str(Score))
  StopDrawing()
Until KeyboardPushed(#PB_Key_Escape)
A mettre au point : des bonus à manger avec la tête du serpent pour raccourcir sa longueur ou augmenter le score ...

Si ça tente qq'un on peut faire ça !

Publié : ven. 20/août/2004 15:11
par garzul
:D :smilecolros: C'est moi qui lui ai donnée l'idée et c'est lui qui la fait ^^ au faite trés bien ton serpent fweil continue comme sa PS : Je sais quel projet vous faite avec cederavic j'ai trouvée et il me la dit ^^ Continuez comme sa les gars sa va etres cool (JE VOUS PROMET QUE BOUCHE COUSUE ^^) @++

Publié : ven. 20/août/2004 15:26
par Oliv
bone idée fweil
garzul a écrit ::D :smilecolros: C'est moi qui lui ai donnée l'idée et c'est lui qui la fait ^^ au faite trés bien ton serpent fweil continue comme sa PS : Je sais quel projet vous faite avec cederavic j'ai trouvée et il me la dit ^^ Continuez comme sa les gars sa va etres cool (JE VOUS PROMET QUE BOUCHE COUSUE ^^) @++
niveau bouche cousue c'est mal partir là non ?

Publié : ven. 20/août/2004 16:13
par Backup
c'etait pas un vieux projet remis en route par hazard ??

Dobro qui veut tout savoir et rien payer !!! :lol:

Publié : ven. 20/août/2004 17:44
par Backup
le soldat nous a fait un serpent tout a l'heure !!
j'ai repris son code que j'ai a peine modifié pour que celui-ci accepte les data
a la place des coordonées souris !!

pourquoi ai-je fait ça ??

ben parcequ'il y a un temps certain j'avais fait un enregistreur de chemin pour sprite 2D
et a l'epoque je generai un fichier de donné (pas des data !)

voici qui est reparé ; j'ai utilise le programme du soldat pour servir de cobaye niark ! niaark !

donc vous lancez de createur de chemin
en cliquant bouton gauche vous dessinez votre courbe
puis un clique sur le bouton droit et
le programme va cracher 2 fichiers
un pour lui (pour la relecture) eventuelement utilisable dans un source

l'autre c'est "Chemin_data.txt"
qui contient les fameux data pre-formaté pour etre inseré dans un code !!

les datas en question sont les coordonnéés de la souris au moment du dessin

vous faites votre courbe et vous copier-coller dans le source du soldat
a la place des data que j'y ai mis !!
et voila comment on ne se prend pas la tete a faire un tableau avec des sprite au chemins "precalculé"

voici le source du soldat inconnu , que j'ai massacré
:D

Code : Tout sélectionner

 ; Auteur : Le Soldat Inconnu
; Version de PB : 3.90
;
; Explication du programme :
; Dessiner un serpent de boule qui suit la souris

; Dimension du screen
#EcranX = 1024
#EcranY= 768

#NbBoule = 100 ; Nombre de boule
compteur=#NbBoule*4
#RayonBoule = 17 ; diamètre des boules

#Vitesse.f = 0.2 ; Vitesse de déplacement des boules
Restore label
Structure BouleInfo ; Contient la position de chaque boule
    x.f
    y.f
EndStructure
Dim Boule.BouleInfo(#NbBoule)

Procedure DessineBoule(id, Couleur)
    ; ID : Identifiant du sprite
    ; Couleur : Couleur RGB de la boule 
    CreateSprite(id, #RayonBoule * 2 + 1, #RayonBoule * 2 + 1)
    StartDrawing(SpriteOutput(id))
    Circle(#RayonBoule, #RayonBoule, #RayonBoule, Couleur) ; On dessine une boule
    StopDrawing() 
EndProcedure


InitSprite()
InitKeyboard()
InitMouse()
OpenScreen(#EcranX, #EcranY, 32, "")

; On crée les sprites qui représentent des boules de couleur de plus en plus claires
For n = 0 To #NbBoule
    Coef.f = n / #NbBoule
    DessineBoule(n, RGB(255, 165 + (255 - 165) * Coef, 255 * Coef))
Next

; On place la souris au point de départ
;MouseLocate(#RayonBoule, #RayonBoule)

Repeat
    ExamineMouse()
    ExamineKeyboard()
    
    ClearScreen(0, 0, 0) ; On efface l'écran
    
    ; Position de la première boule que l'on calcule avec la souris
    ; Il s'agit de la boule 0
    ;     Boule(0)\x = MouseX() - #RayonBoule
    ;     Boule(0)\y = MouseY() - #RayonBoule
    If fin=0
    Read  x_dob
EndIf

    If x_dob <> 8888 
        Read  y_dob  
    Else
        fin=1
    EndIf
    
    
    
    ;:x_dob =x_dob - #RayonBoule
    ;:y_dob =y_dob - #RayonBoule
    Boule(0)\x =x_dob-#RayonBoule
    Boule(0)\y =y_dob-#RayonBoule
    
    
    
    For n = #NbBoule To 1 Step -1 ; Pour chaque boule
        
        ; On part de la fin afin que la dernière boule soit en dessous des autres
        
        ; On calcul la vitesse de déplacement en x de la boule à partir de la distance entre cette boule et la précédente
        ; Le but est de permettre à cette boule de suivre la précédente
        ; Et plus la distance entre ces 2 boules est grande et plus elle ira vite pour la rattraper
        VitesseX.f = (Boule(n - 1)\x - Boule(n)\x) * #Vitesse
        
        ; De même sur les y
        VitesseY.f = (Boule(n - 1)\y - Boule(n)\y) * #Vitesse
        
        ; On détermine la nouvelle position de la boule
        Boule(n)\x + VitesseX
        Boule(n)\y + VitesseY
        
        ; On affiche la boule
        DisplayTransparentSprite(n, Boule(n)\x, Boule(n)\y)
        
        
    Next
    
    DisplayTransparentSprite(0, Boule(0)\x, Boule(0)\y) ; On affiche la boule qui représente la souris
    ;DisplayTransparentSprite(2000, x_dob, y_dob) ; On affiche la boule qui représente la souris
    
    ; Elle est affiché en dernier pour être au dessus des autres
    
    FlipBuffers()
    If fin=1
        compteur-1
        If compteur=0
            End
        EndIf 
    EndIf
Until KeyboardPushed(#PB_Key_Escape)


DataSection
label:
Data.l 6,758,6,758,6,758,6,758,6,758,6,758,6,758,6,758,7,756,7,755 
Data.l 7,755,7,754,8,753,8,752,8,750,9,749,9,749,9,748,10,747,10,747 
Data.l 10,746,11,745,11,743,12,742,13,741,14,740,14,739,15,737,16,736,17,735 
Data.l 18,734,18,733,19,733,20,732,20,731,21,730,22,729,23,728,24,727,25,725 
Data.l 27,724,27,723,29,722,30,721,31,720,33,719,34,718,35,716,36,715,38,713 
Data.l 40,711,41,710,42,708,43,708,44,706,45,704,46,704,47,702,48,701,50,699 
Data.l 52,697,53,695,55,693,56,692,58,688,60,686,61,684,62,681,63,680,66,676 
Data.l 68,673,69,671,71,667,73,665,75,661,79,655,81,653,83,648,84,645,86,641 
Data.l 88,636,88,634,90,630,92,625,93,623,94,619,94,617,95,613,95,609,96,607 
Data.l 96,602,96,599,97,593,98,586,99,583,101,575,103,571,105,562,108,553,109,548 
Data.l 111,539,113,535,115,526,117,517,117,513,118,506,119,501,121,494,124,486,125,482 
Data.l 127,475,127,471,128,463,129,456,129,452,130,445,131,441,132,434,132,426,133,422 
Data.l 134,414,134,410,136,402,137,394,137,390,138,382,139,377,140,368,141,358,142,353 
Data.l 143,342,143,337,144,328,145,317,146,312,147,302,148,292,149,288,150,278,151,274 
Data.l 152,265,153,256,153,251,155,242,155,238,156,230,159,221,160,217,162,209,163,205 
Data.l 165,197,167,189,169,186,171,178,172,175,174,168,176,162,177,158,179,153,180,150 
Data.l 183,145,185,141,187,139,189,136,190,135,192,132,194,131,195,130,199,128,201,127 
Data.l 205,125,208,123,209,123,213,123,215,122,220,122,225,122,228,122,233,122,236,122 
Data.l 241,122,244,122,247,123,252,125,255,125,257,126,257,126,258,126,260,127,261,128 
Data.l 262,129,263,130,265,132,267,133,269,135,270,135,272,138,274,140,277,143,280,146 
Data.l 281,147,283,150,284,151,287,154,290,156,292,158,295,161,296,162,297,164,298,165 
Data.l 300,168,301,170,303,173,305,176,306,178,307,181,308,182,309,184,310,188,310,189 
Data.l 311,193,312,195,312,197,312,198,312,199,312,201,312,203,313,208,312,213,312,215 
Data.l 312,220,312,223,312,228,312,233,312,236,312,242,312,244,311,250,310,256,310,259 
Data.l 309,265,309,267,308,273,306,277,305,279,304,283,303,285,302,289,299,293,298,295 
Data.l 295,298,294,300,291,303,287,307,285,309,282,312,281,313,281,313,281,313,281,313 
Data.l 280,313,279,315,279,315,278,315,276,316,276,316,276,316,276,316,275,316,274,316 
Data.l 273,316,272,316,271,316,271,316,271,316,270,316,269,316,268,316,265,317,262,317 
Data.l 260,317,255,317,253,317,251,317,248,317,248,317,246,317,245,317,241,317,240,317 
Data.l 237,316,234,317,233,317,231,317,229,316,226,316,223,316,221,316,218,316,216,316 
Data.l 212,316,209,316,207,315,204,315,202,315,202,315,202,315,201,315,200,315,198,315 
Data.l 197,315,195,315,193,315,191,315,190,315,189,315,187,315,186,315,185,315,184,315 
Data.l 183,315,181,315,179,315,178,315,178,315,177,315,176,315,175,315,174,316,174,316 
Data.l 173,317,172,317,171,318,170,318,169,319,168,319,168,319,167,320,166,320,166,321 
Data.l 165,322,164,322,164,323,164,323,163,323,163,324,162,324,162,324,161,325,161,325 
Data.l 160,326,159,326,159,326,158,326,158,327,158,327,158,327,157,327,157,328,157,328 
Data.l 157,328,156,329,156,329,155,330,155,330,155,331,155,332,155,332,155,333,154,333 
Data.l 154,335,154,336,153,338,153,340,152,342,152,344,150,347,149,351,149,353,148,356 
Data.l 148,358,148,359,146,362,146,363,146,364,145,365,145,367,145,368,144,370,143,373 
Data.l 143,374,142,377,142,378,141,382,140,385,140,386,139,389,138,390,137,393,137,396 
Data.l 136,398,135,401,135,402,134,406,132,410,131,412,130,415,130,417,129,421,128,425 
Data.l 127,427,126,430,125,432,125,435,124,438,123,440,122,443,121,446,121,448,121,451 
Data.l 121,452,121,455,120,458,120,460,120,464,120,466,119,470,119,474,118,476,118,480 
Data.l 117,482,117,487,116,491,116,493,115,498,115,500,114,504,114,507,114,508,113,511 
Data.l 113,513,113,516,112,519,112,520,112,523,111,524,110,527,110,529,109,531,109,534 
Data.l 109,535,109,538,109,540,109,542,109,545,109,547,109,550,109,553,109,555,109,558 
Data.l 109,559,110,562,110,565,111,567,111,569,112,571,113,573,114,576,115,578,117,581 
Data.l 119,584,120,585,122,587,123,588,125,590,128,593,130,594,133,597,136,598,141,601 
Data.l 147,603,150,605,158,606,161,607,168,609,175,611,179,611,186,612,190,612,196,612 
Data.l 203,611,207,609,214,605,217,602,223,597,228,592,230,589,233,583,236,579,239,573 
Data.l 241,567,242,564,244,558,245,554,246,549,247,542,247,539,248,533,248,531,248,526 
Data.l 248,523,248,521,248,519,248,518,248,517,248,517,248,516,248,516,248,516,248,516 
Data.l 248,516,247,516,246,516,245,518,244,522,244,524,244,530,244,533,244,539,244,546 
Data.l 245,549,246,555,246,558,247,565,249,572,250,576,252,582,255,587,257,588,259,591 
Data.l 261,592,264,595,268,599,269,600,272,603,273,604,276,606,280,609,282,610,286,612 
Data.l 287,613,290,614,294,615,296,615,302,615,304,615,309,614,314,612,316,611,320,609 
Data.l 322,607,325,605,328,602,330,601,333,596,336,593,339,588,342,583,343,581,345,577 
Data.l 346,575,347,571,348,567,349,565,350,561,350,559,351,555,351,550,351,548,352,544 
Data.l 352,542,352,537,352,533,352,531,351,526,351,525,351,522,351,520,351,519,351,519 
Data.l 351,518,350,518,350,518,350,518,350,518,350,518,350,518,350,518,350,518,350,518 
Data.l 350,518,350,518,350,518,350,519,350,520,350,521,349,522,349,523,349,525,349,528 
Data.l 349,529,349,531,349,532,349,534,349,537,349,538,349,540,349,541,349,545,349,548 
Data.l 350,549,350,553,351,555,352,560,355,566,356,569,359,575,360,577,362,582,365,586 
Data.l 367,589,370,592,372,594,376,597,380,601,383,602,389,604,392,606,397,607,400,608 
Data.l 402,608,405,608,407,608,412,606,418,604,421,602,429,599,432,597,442,593,450,589 
Data.l 455,586,464,580,472,574,476,572,484,565,487,562,493,555,499,549,501,547,505,541 
Data.l 508,537,511,531,514,524,515,521,518,514,518,510,520,502,521,494,521,490,523,484 
Data.l 523,482,521,476,520,471,519,469,517,466,515,465,512,462,509,459,508,458,504,455 
Data.l 503,454,500,452,496,450,492,449,487,447,485,447,482,447,480,447,479,447,478,447 
Data.l 477,448,477,449,476,450,476,453,477,454,477,457,479,458,482,461,486,464,488,465 
Data.l 493,468,495,468,501,470,507,472,510,472,517,474,520,474,526,474,531,475,534,475 
Data.l 543,476,546,477,554,477,559,475,562,474,566,472,568,471,571,468,575,465,576,464 
Data.l 580,461,583,458,584,456,588,453,590,452,595,450,598,447,600,446,604,444,606,444 
Data.l 612,442,617,441,619,440,626,438,629,437,636,435,643,433,645,433,649,431,650,431 
Data.l 652,430,654,428,655,427,657,425,658,424,660,422,660,420,660,419,658,416,657,416 
Data.l 653,414,647,413,644,413,637,413,634,413,627,413,620,413,618,414,613,415,612,415 
Data.l 608,415,605,417,603,418,601,420,599,422,599,424,597,428,597,430,596,434,595,436 
Data.l 595,441,596,445,596,446,596,450,597,454,598,455,599,459,599,461,600,465,601,469 
Data.l 601,471,602,475,602,478,603,482,603,486,604,488,605,493,605,495,606,498,606,502 
Data.l 607,504,608,508,608,510,609,514,611,519,612,521,613,525,614,527,615,530,617,534 
Data.l 617,536,619,539,620,541,622,545,624,550,625,552,626,555,627,556,628,559,630,561 
Data.l 630,563,632,565,633,566,635,568,637,571,638,572,639,574,641,576,642,577,643,578 
Data.l 645,579,647,581,648,582,652,583,657,584,659,585,664,586,668,586,670,586,675,586 
Data.l 677,586,682,585,687,583,689,582,694,579,696,577,701,574,705,571,707,569,710,564 
Data.l 711,562,714,556,716,550,716,547,717,542,717,540,717,535,717,531,717,529,717,525 
Data.l 717,523,716,519,714,515,714,513,713,509,712,508,711,505,710,502,710,501,710,501 
Data.l 710,501,710,501,710,501,710,501,710,501,710,501,711,501,712,502,717,504,724,507 
Data.l 728,508,736,512,740,512,747,515,754,517,757,517,764,519,767,520,773,522,779,523 
Data.l 783,523,790,524,794,524,802,525,810,525,813,525,820,523,823,522,830,520,835,517 
Data.l 837,516,840,512,842,510,844,507,845,503,846,501,846,498,846,495,846,494,846,491 
Data.l 846,489,846,486,844,484,843,482,841,479,840,478,837,476,834,473,832,472,828,469 
Data.l 826,468,821,465,817,463,815,462,810,461,808,460,803,459,797,459,794,459,788,459 
Data.l 785,459,779,459,774,459,771,459,766,461,763,462,759,463,755,465,752,466,748,468 
Data.l 746,469,743,471,739,474,738,475,734,478,733,480,730,483,728,487,727,488,725,493 
Data.l 725,495,724,500,723,504,723,506,723,510,723,512,724,516,725,520,726,523,727,528 
Data.l 729,533,731,536,733,540,735,543,737,547,740,550,741,552,743,555,744,556,747,560 
Data.l 749,563,750,565,753,569,754,571,756,574,759,577,759,578,762,580,763,581,766,583 
Data.l 767,584,771,586,775,588,777,589,782,590,784,592,790,593,796,594,799,595,804,597 
Data.l 809,598,812,599,818,599,822,600,828,600,834,601,837,601,843,602,846,602,852,604 
Data.l 858,605,862,606,870,608,873,608,881,609,888,610,892,610,900,611,903,612,911,613 
Data.l 919,613,923,614,929,615,933,615,938,616,943,616,945,616,949,616,951,616,955,616 
Data.l 959,616,961,616,965,616,968,616,971,616,975,616,976,616,979,615,980,615,983,615 
Data.l 986,615,988,614,990,614,991,613,993,612,996,612,997,612,1000,612,1002,611,1004,611 
Data.l 1007,610,1008,610,1010,609,1012,609,1013,609,1014,608,1015,608,1017,608,1018,608,1022,606 
Data.l 1023,606,8888
EndDataSection




et voici le Createur de chemin pour sprite qui pond des Datas !! :lol:

Code : Tout sélectionner

             
            ; crée par dobro avec ses petits doigts tout fretillants !!
            ; Exemple de creation d'un chemin pour jeux video 2D
            ; du Type Space invader
            ; dessin avec le bouton gauche de la souris
            ;fin du dessin avec le bouton droit de la souris
            
            spr=1
                #Police=1
                ; ***********************************
                Resultat = InitSprite()
                FontID = LoadFont(#Police, "arial", 18, #PB_Font_Bold )
                EcranX = GetSystemMetrics_(#SM_CXSCREEN):;=largeur de l'ecran
                EcranY = GetSystemMetrics_(#SM_CYSCREEN):;=hauteur de l'ecran
                WindowID = OpenWindow(1, 0, 0, EcranX, EcranY ,  #PB_Window_SystemMenu|#PB_Window_BorderLess |#PB_Window_ScreenCentered , "hello") 
                
                WindowID = WindowID(1) 
                Result = OpenWindowedScreen(WindowID,0,0, EcranX,EcranY, 1, 0,0)
                
                Resultat = InitMouse() 
                NewList liste1() :;cree une liste
                Resultat = CreateSprite(1, 10, 10, 0) :;on cree un sprite
                StartDrawing( SpriteOutput(1) ) : ; on va dessiner une boite verte dans le sprite
                Box(0, 0, 10, 10 ,RGB(0,255,0) ) 
                StopDrawing() :; voila c'est fait notre sprite est pret !!
                Resultat = CreateSprite(2, 10, 10, 0) :;on cree un sprite
                StartDrawing( SpriteOutput(2) ) : ; on va dessiner une boite rouge dans le sprite
                Box(0, 0, 10, 10 ,RGB(255,0,0) ) 
                StopDrawing() :; voila c'est fait notre sprite est pret !!
                Repeat
                     Resultat = ExamineMouse() 
                     event=WaitWindowEvent() :;multitache !!
                  
                       DisplaySprite(spr, MouseX(), MouseY()) 
              
                
                    StartDrawing( ScreenOutput()) 
                    Locate (10,10)
                    DrawText(Str(MouseX())+"   "+Str(MouseY()))
                   
                    
                    ;ClearScreen(0, 0, 0) :;efface l'ecran
                    ;*******************   GENERATEUR DE CHEMIN     **********************
                    ;**********************************************************************
                    ;************************** PHASE 1 ***********************************
                    ;  dessin et  enregistrement des coordonnes dans un fichier ***********
                    ;*************  "chemin.ini  et data dans "chemin_data.txt" ***********
                    ;**********************************************************************
                    ;**********************************************************************
                    
                    If  MouseButton(1): ;enregistre les coordonees dessiné 
                         spr=2
                        ; Plot(MouseX() , MouseY() , RGB(255, 255,255) ) 
                        ; A small loop to add many items to the list 
                        AddElement(liste1()) :; ajoute coordonee x a la liste
                        liste1()=  MouseX()
                        AddElement(liste1()) :; ajoute coordonnee y a la liste
                        liste1()=  MouseY() 
                        Delay(5)
                        FlipBuffers(60):; affiche l'ecran
                    EndIf
                    
                    If  MouseButton(2):; stop l'enregistrement 
                        spr=1
                        dess=1
                        ; ********* Cree le fichier qui contien les coordonnees
                        Resultat = CreateFile(1,"chemin.ini") 
                        ResetList(liste1()) :; on seplace avant le premier element de la liste
                        While NextElement(liste1()):; boucle tant que la liste n'est pas fini
                            WriteLong(liste1()) 
                        Wend
                        CloseFile(1)
                        
                        ; ********* Cree le fichier DATA qui contien les coordonnees
                        Resultat = CreateFile(2,"chemin_data.txt") 
                        ResetList(liste1()) :; on seplace avant le premier element de la liste
                        WriteStringN("DataSection")
                        WriteStringN("label:")
                        WriteString("data.l ")
                        
                        
                        While NextElement(liste1()):; boucle tant que la liste n'est pas fini 
                            da+1 
                            WriteString(Str(liste1())) 
                            
                            If da<20 
                            WriteString(",") 
                            EndIf
                       
                        
                            If da=20:da=0
                                WriteStringN(" ")
                                WriteString("Data.l ") 
                            EndIf
                        Wend
                        WriteString("8888") : ;Data qui marque la fin !!! 
                        WriteStringN(" ")
                        WriteStringN("EndDataSection")
                        
                        CloseFile(2)
                        
                        
                        
                    EndIf
                    StopDrawing() 
                    ;**********************************************************************
                    ;*********************CECI peut etre dans le programe de jeux **********
                    ;************************** PHASE 2 ***********************************
                    ; ****************** Lecture des coordonnes dans un fichier ***********
                    ;*************  "chemin.ini *******************************************
                    ;**********************************************************************
                    ;**********************************************************************
                    If dess=1
                        NewList chemin() :;cree une liste
                        Resultat = OpenFile(1, "chemin.ini") 
                        While Eof(1)=0 :; tant que fin de fichier pas atteinte
                           ; CallDebugger
                            coordx = ReadLong() :;lit la coordonee x
                             coordy = ReadLong() :;lit la coordonee y
                             AddElement(chemin()) :; ajoute coordonee x a la liste
                            chemin()=  coordx
                            AddElement(chemin()) :; ajoute coordonnee y a la liste
                            chemin()= coordy
                             Wend
                         Resultat = CreateSprite(1, 10, 10, 0) :;on cree un sprite
                        StartDrawing( SpriteOutput(1) ) : ; on va dessiner une boite verte dans le sprite
                        Box(0, 0, 10, 10 ,RGB(0,255,0) ) 
                        StopDrawing() :; voila c'est fait notre sprite est pret !!
                        nbr=CountList(chemin()) 
                         ResetList(chemin()) :; on se place avant le premier element de la liste
                        
                        CallDebugger
                        Debug nbr
                        While NextElement(chemin()):; boucle tant que la liste n'est pas fini
                        
                            ; ********* Cree le fichier qui contien les coordonnees
                            x=chemin() :; lit d'abord la coordonee x
                            NextElement(chemin()):; passe a la donnee suivante dans la liste
                            y=chemin():; lit la coordonnee y
                            NextElement(chemin()):; passe a la donnee suivante dans la liste
                            x2=chemin() :; lit d'abord la coordonee x
                            NextElement(chemin()):; passe a la donnee suivante dans la liste
                            y2=chemin():; lit la coordonnee y
                            
                            
                            ; Boucle pour le path finding
                           ; CallDebugger
                           
                            cour=1
                            While cour=1 
                               
                                If  x<x2:x=x+1:cour=1:EndIf
                                If  x>x2:x=x-1:cour=1:EndIf
                                If  y<y2:y=y+1:cour=1:EndIf
                                If y>y2:y=y-1:cour=1:EndIf
                                
                                
                           
                            DisplaySprite(1, x, y) 
                            FlipBuffers():; affiche l'ecran
                            ClearScreen(0, 0, 0) :;efface l'ecran
                            If x=x2 And y=y2
                                cour=0
                                x2=x
                                y2=y
                            EndIf
                           
                          Wend
                             
                        Wend
                       
                        End
                    EndIf
                    
                    
                    
                    
                    
                    
                    
                    
                    If MouseButton(1)=0
                    FlipBuffers():; affiche l'ecran
                    ClearScreen(0, 0, 0) :;efface l'ecran
                    EndIf
                    ;
                    
                Until event=#PB_Event_CloseWindow 

amusez-vous bien !!

Publié : ven. 20/août/2004 19:56
par Oliv
de mieux en mieux :D
Par contre à la fin j'ai ça :

Code : Tout sélectionner

erreur ligne 58 : no more data"

Publié : ven. 20/août/2004 22:02
par Backup
le problem etait dans le listing numero 1 (celuis du soldat que j'ai mal modifié)

le problem est resolu merci , j'ai reédité le listing !! :D

Publié : sam. 21/août/2004 11:43
par Le Soldat Inconnu
j'ai modifié, ça tourne en rond tout seul, attention au mal de l'air

pour ceux qui n'ont pas la valeur de #Pi en resident

ajouté ceci dans le code :

Code : Tout sélectionner

#Pi.f = 3.14159265

Code : Tout sélectionner

; Auteur : Le Soldat Inconnu 
; Version de PB : 3.90 
; 
; Explication du programme : 
; Dessiner un serpent de boule qui tourne en rond

; Dimension du screen 
#EcranX = 1024 
#EcranY= 768 

#NbBoule = 300 ; Nombre de boule 
#RayonBoule = 15 ; diamètre des boules 

#Vitesse.f = 0.23 ; Vitesse de déplacement des boules 

Structure BouleInfo ; Contient la position de chaque boule 
  x.f 
  y.f 
EndStructure 
Dim Boule.BouleInfo(#NbBoule) 

Procedure DessineBoule(ID, Couleur) 
  ; ID : Identifiant du sprite 
  ; Couleur : Couleur RGB de la boule 

  CreateSprite(ID, #RayonBoule * 2 + 1, #RayonBoule * 2 + 1) 
  StartDrawing(SpriteOutput(ID)) 
    Circle(#RayonBoule, #RayonBoule, #RayonBoule, Couleur) ; On dessine une boule 
  StopDrawing() 
  
EndProcedure 


InitSprite() 
InitKeyboard() 
InitMouse() 
OpenScreen(#EcranX, #EcranY, 32, "") 

; On crée les sprites qui représentent des boules de couleur de plus en plus claires 
For n = 0 To #NbBoule 
  Coef.f = n / #NbBoule 
  DessineBoule(n, RGB(255, 165 + (255 - 165) * Coef, 255 * Coef)) 
Next 

; On place la souris au point de départ 
MouseLocate(#RayonBoule, #RayonBoule) 

Repeat 
  ExamineMouse() 
  ExamineKeyboard() 
  
  ClearScreen(0, 0, 0) ; On efface l'écran 
  
  ; Position de la première boule que l'on calcule avec la souris 
  ; Il s'agit de la boule 0 
  Angle.f + #Pi / 100
  If Angle >= 2 * #Pi
    Angle = 0
  EndIf
  
  Boule(0)\x = (#EcranY / 2 - #RayonBoule) * Cos(Angle) + #EcranX / 2 - #RayonBoule
  Boule(0)\y = (#EcranY / 2 - #RayonBoule) * Sin(Angle) + #EcranY / 2 - #RayonBoule
  
  For n = #NbBoule To 1 Step -1 ; Pour chaque boule 
    ; On part de la fin afin que la dernière boule soit en dessous des autres 
  
    ; On calcul la vitesse de déplacement en x de la boule à partir de la distance entre cette boule et la précédente 
    ; Le but est de permettre à cette boule de suivre la précédente 
    ; Et plus la distance entre ces 2 boules est grande et plus elle ira vite pour la rattraper 
    VitesseX.f = (Boule(n - 1)\x - Boule(n)\x) * #Vitesse 
    
    ; De même sur les y 
    VitesseY.f = (Boule(n - 1)\y - Boule(n)\y) * #Vitesse 
    
    ; On détermine la nouvelle position de la boule 
    Boule(n)\x + VitesseX 
    Boule(n)\y + VitesseY 
    
    ; On affiche la boule 
    DisplayTransparentSprite(n, Boule(n)\x, Boule(n)\y) 
    
  Next 
  
  DisplayTransparentSprite(0, Boule(0)\x, Boule(0)\y) ; On affiche la boule qui représente la souris 
  ; Elle est affiché en dernier pour être au dessus des autres 
  
  FlipBuffers() 
  
Until KeyboardPushed(#PB_Key_Escape)

Publié : sam. 21/août/2004 14:00
par Backup
j'ai regardé ton serpent a boule :lol: :lol:
ce matin et la je viens de me reveiller !! ça hypnotise ce truc !! :lol: