La section hors sujet non officielle.
Vous n'êtes pas identifié(e).
Pages : 1
Je me permets de vous présenter ce petit code source qui simule un comportement ressemblant à celui possible en société.
Les 'individus' se déplacent sur une surface homogène.
Les remarques motivent à corriger le code, donc n'hésitez pas.
;{ Head }
InitSprite()
InitKeyboard()
InitMouse()
ExamineDesktops()
OpenScreen(DesktopWidth(0), DesktopHeight(0), 32, "")
;}
Global ScrW = ScreenWidth()
Global scrH = ScreenHeight()
Global ScrW2 = ScrW / 2
Global scrH2 = ScrH / 2
Global ScrXmax = ScrW - 1
Global ScrYmax = ScrH - 1
oSize = 16
CreateSprite(0, oSize, oSize, #PB_Sprite_AlphaBlending)
If StartDrawing(SpriteOutput(0) )
W = OutputWidth()
H = OutputHeight()
DrawingMode(#PB_2DDrawing_AllChannels)
Box(0, 0, W, H, RGBA(0, 0, 0, 0) )
Divs = oSize / 8
For I = 0 To (Divs - 1)
G1 = (256 / Divs) * I
G2 = I * (W / 2 - 1) / Divs
G3 = I * (H / 2 - 1) / Divs
Ellipse(W / 2 - 0, H / 2 - 0, W / 2 - 1 - G2, H / 2 - 1 - G3, RGBA(0, 0, 0, 255) )
Next
StopDrawing()
EndIf
SprLimit = 127 ; max = 8191
Dim X.D(SprLimit)
Dim Y.D(SprLimit)
Dim W.D(SprLimit)
Dim H.D(SprLimit)
Dim VX.D(SprLimit)
Dim VY.D(SprLimit)
Dim AX.D(SprLimit)
Dim AY.D(SprLimit)
Dim Freez(SprLimit)
For I = 0 To SprLimit
W(I) = oSize
H(I) = oSize
X(I) = Random(ScrXmax + W(I) ) - W(I)
Y(I) = Random(ScrYmax + H(I) ) - H(I)
VX(I) = (Random(ScrXmax) - ScrW2) / 1000.0
VY(I) = (Random(ScrYmax) - ScrH2) / 1000.0
Next
Procedure.D Hyp(x1.D, y1.D, x2.D, y2.D)
Define.D R
DX.D = x2 - x1
DY.D = y2 - y1
R = ((DX*DX) + (DY*DY ) )
ProcedureReturn R
EndProcedure
Repeat
ExamineKeyboard()
ExamineMouse()
ClearScreen(-1)
For I = 0 To SprLimit
If Freez(I) = 0
AX(I) = 0.0
AY(I) = 0.0
For J = I + 1 To SprLimit
DX.D = X(J) - X(I)
DY.D = Y(J) - Y(I)
Hyp.D = ((DX*DX) + (DY*DY ) )
Angle.D = ATan2(DX, DY)
If Sqr(Abs(Hyp) ) > oSize
Force.D = 100.0 / Hyp
Else
Force.D = 0.0
Angle2.D = ATan2(VX(I), VY(I) )
Angle3.D = Angle2 - Angle
Force2.D = Sqr(Hyp(0, 0, VX(I), VY(I) ) )
VX(I) = Cos(Angle3) * Force2
VY(I) = Sin(Angle3) * Force2
Angle2.D = ATan2(VX(J), VY(J) )
Angle3.D = Angle2 - Angle
Force2.D = Sqr(Hyp(0, 0, VX(J), VY(J) ) )
VX(J) = Cos(Angle3) * Force2
VY(J) = Sin(Angle3) * Force2
EndIf
AX(I) + Cos(Angle) * Force
AY(I) + Sin(Angle) * Force
AX(J) - Cos(Angle) * Force
AY(J) - Sin(Angle) * Force
Next
VX(I) + AX(I)
VY(I) + AY(I)
X(I) + VX(I)
Y(I) + VY(I)
CoefA.D = 0.2
If X(I) < 0.0 - 2*W(I): X(I) + ScrW + W(I): VX(I) * CoefA: VY(I) * CoefA: EndIf
If Y(I) < 0.0 - 2*H(I): Y(I) + ScrH + H(I): VX(I) * CoefA: VY(I) * CoefA: EndIf
If X(I) > ScrXmax+W(I): X(I) - ScrW - W(I): VX(I) * CoefA: VY(I) * CoefA: EndIf
If Y(I) > ScrYmax+H(I): Y(I) - ScrH - H(I): VX(I) * CoefA: VY(I) * CoefA: EndIf
EndIf
DisplayTransparentSprite(0, X(I), Y(I) )
Next
FlipBuffers()
Until KeyboardPushed(#PB_Key_Escape) Or MouseButton(#PB_MouseButton_Middle)
Hors ligne
Si vous avez des difficultés à récupérer le code, une fois identifié, cliquez sur [citer]. Vous disposez alors de la totalité du code source.
Hors ligne
C'est excellent
~ Ar-S ~
Hors ligne
Perso je trouve qu'en ajoutant le tableau
[== PureBasic ==]
Dim Color.q(SprLimit)"
à initialiser dans la boucle For (ligne 50) avec :
[== Undefined ==]
Repeat
Color(I) = RGB(Random(255), Random(255), Random(255))
Until Red(Color(I)) + Green(Color(I)) + Blue(Color(I)) < 512
Et enfin à utiliser en remplaçant
[== PureBasic ==]
DisplayTransparentSprite(0, X(I), Y(I) )
par
[== PureBasic ==]
DisplayTransparentSprite(0, X(I), Y(I), 255, Color(I))
C'est plus sympas à regarder.
Remarque : Le comportement lorsque deux points rentrent en collision est trop chelou.
Dernière modification par Naheulf (25-04-2020 20:05:28)
Hors ligne
Bien en couleur.
Oui les rencontes sont excellentes. ça fait très fourmis.
~ Ar-S ~
Hors ligne
Tiens c'est spécial comme méthode de colorisation ça Naheulf.
Si le jeu de couleurs RGB formait un cube, ce serait comme le couper en 2, et lui enlever 1/4 de son volume.
Hors ligne
Coool !!!! Super joli
Bon...on sait pas trop vu d'en haut et la rapidité du geste, si les boules sont plutôt familieres des Léporidés ou s'embrassent tout simplement...mais c'est rigolo à voir comme comportement
Mais dis donc OLLIVIER je rêve ou avec ton code t'es en hors-sujet dans le hors sujet
Tu devrais être locké
Merci beaucoup pour ce partage et merci à MAHEUF pour avoir renouvelé la prouesse 50 ans après
https://www.francebleu.fr/infos/medias- … 1506624937
ça fait très fourmis.
Mais alors qu'aurait bien bouffé pendant le confinement
Dernière modification par kwai chang caine (26-04-2020 17:58:02)
Hors ligne
@KCC regarde les "Dinoponera grandis", tu vas flipper
~ Ar-S ~
Hors ligne
Pages : 1