Je cherche une instruction

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
SPH
Messages : 4945
Inscription : mer. 09/nov./2005 9:53

Je cherche une instruction

Message 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

!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.12LTS- 64 bits
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Je cherche une instruction

Message 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

~~~~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
SPH
Messages : 4945
Inscription : mer. 09/nov./2005 9:53

Re: Je cherche une instruction

Message 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()

8O

!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.12LTS- 64 bits
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Je cherche une instruction

Message par Ar-S »

Sinon une liste chainée... Tu ajoutes (ou enlève) un élément au fur et à mesure.
~~~~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
SPH
Messages : 4945
Inscription : mer. 09/nov./2005 9:53

Re: Je cherche une instruction

Message par SPH »

Je pense que c'est ça !

(je teste ça) 8)


Thx

!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.12LTS- 64 bits
Répondre