Page 1 sur 1
Je cherche une instruction
Publié : sam. 08/févr./2025 19:37
par SPH
Salut,
J'ai un peu la flemme de chercher et surtout : je ne sais pas quoi chercher.
Quoi donc ?
=> la fameuse instruction qui ajoute et qui retire un element d'une serie d'evenement (comme par exemple un point ou un sprite)
Si vous ne voyez toujours pas, imaginez 100 pixels se déplaçant dans l'ecran. A chaque collision, ca ajoute un pixel (ou ca elimine un pixel, qu'importe).
Merci
Re: Je cherche une instruction
Publié : dim. 09/févr./2025 15:52
par Ar-S
Tes sprites sont gérés dans un tableau ? Tu affiches un nombre N pour démarrer. En gérant les collisions par coordonnées par exemple, à toi de modifier le N dans ta boucle +1 ou -1 si collision.
ici tableau de 1000 sprites max
Tu en affiches 150
Si 2 pixels se touchent, soit +1 vert, soit -1
Les verts ensuite ne peuvent avoir le même comportement qu'avec les blancs.
Code : Tout sélectionner
; Initialisation
InitSprite()
InitKeyboard()
OpenScreen(800, 600, 32, "Sprites aléatoires")
Structure Sprite
x.l
y.l
color.l
isGreen.b ; 1 = Vert, 0 = Blanc
EndStructure
Global Dim sprites.Sprite(1000) ; Tableau contenant jusqu'à 1000 sprites
Global spriteCount = 150 ; Départ avec 150 sprites actifs
Global Dim pixelGrid(800, 600) ; Grille de détection des collisions (blancs uniquement)
; Initialisation des 150 premiers sprites (blancs)
For i = 0 To spriteCount - 1
sprites(i)\x = Random(799)
sprites(i)\y = Random(599)
sprites(i)\color = RGB(255, 255, 255) ; Blanc
sprites(i)\isGreen = 0
pixelGrid(sprites(i)\x, sprites(i)\y) = 1 ; Seuls les blancs sont enregistrés
Next
Procedure UpdateSprites()
For i = 0 To spriteCount - 1
; Effacer l'ancienne position de la grille si le sprite est blanc
If sprites(i)\isGreen = 0
pixelGrid(sprites(i)\x, sprites(i)\y) = 0
EndIf
; Déplacement aléatoire de ±1 pixel
sprites(i)\x + Random(2) - 1
sprites(i)\y + Random(2) - 1
; Vérification des limites
If sprites(i)\x < 0 : sprites(i)\x = 0 : EndIf
If sprites(i)\x > 799 : sprites(i)\x = 799 : EndIf
If sprites(i)\y < 0 : sprites(i)\y = 0 : EndIf
If sprites(i)\y > 599 : sprites(i)\y = 599 : EndIf
; **Détection de collision** (seulement pour les blancs)
If sprites(i)\isGreen = 0 And pixelGrid(sprites(i)\x, sprites(i)\y) = 1
If Random(1) = 0 And spriteCount > 1 ; Supprimer un sprite blanc
spriteCount - 1
sprites(i) = sprites(spriteCount) ; Remplace par le dernier
ElseIf spriteCount < 1000 ; Ajouter un sprite vert à l'endroit de la collision
sprites(spriteCount)\x = sprites(i)\x
sprites(spriteCount)\y = sprites(i)\y
sprites(spriteCount)\color = RGB(0, 255, 0) ; Nouveau sprite en vert
sprites(spriteCount)\isGreen = 1 ; Marqué comme vert
spriteCount + 1
EndIf
EndIf
; Remettre à jour la grille **uniquement pour les blancs**
If sprites(i)\isGreen = 0
pixelGrid(sprites(i)\x, sprites(i)\y) = 1
EndIf
Next
EndProcedure
Procedure DrawSprites()
ClearScreen(RGB(0,0,0))
StartDrawing(ScreenOutput())
DrawingMode(#PB_2DDrawing_Default)
For i = 0 To spriteCount - 1
Plot(sprites(i)\x, sprites(i)\y, sprites(i)\color)
Next
StopDrawing()
FlipBuffers()
EndProcedure
; Boucle principale
Repeat
ExamineKeyboard()
If KeyboardPushed(#PB_Key_Escape) : End : EndIf
UpdateSprites()
DrawSprites()
Delay(16)
ForEver
Re: Je cherche une instruction
Publié : dim. 09/févr./2025 18:13
par SPH
Ar-S a écrit : dim. 09/févr./2025 15:52
ici tableau de 1000 sprites max
Justement pas !
Je cherche la fameuse instruction qui n'a pas besoin d'une limite. Je crois me rappeler que ca ajoute (on peux dire: a l'infini) un sprite de plus à l'ecran (un sprite ou autre).
Il me semble que ca n'a rien a voir avec un dim()

Re: Je cherche une instruction
Publié : dim. 09/févr./2025 18:59
par Ar-S
Sinon une liste chainée... Tu ajoutes (ou enlève) un élément au fur et à mesure.
Re: Je cherche une instruction
Publié : dim. 09/févr./2025 20:19
par SPH
Je pense que c'est ça !
(je teste ça)
Thx