Outils pour utilisateurs

Outils du site


nsi:langages:processing:billes_qui_rebondissent

Billes qui rebondissent

On reprend le code final de la bille qui rebondit.

On voudrait générer un certain nombre de billes aléatoirement sur la fenêtre et les laisser rebondir. Nous allons devoir utiliser un tableau (Array) et la fonction random.

Initialisation

On choisit un nombre N de billes, par exemple N = 100.

On initialise le tableau en indiquant que l'on réserve la place mémoire pour un tableau contenant N items de type Bille.

final int N = 100;
Bille[] billes = new Bille[N];

setup

On veut initialiser les billes au hasard. Par exemple, x0 entre 0 et 600, y0 entre 0 et 200 et d0 entre 2 et 22. Il faut le faire pour les N billes.

void setup() {
  size(600, 400);
  for (int i=0; i<N; i++) {
    float x0 = random(600);
    float y0 = random(200);
    float d0 = 2 + random(20);
    billes[i] = new Bille(x0, y0, d0);
  }
}

rafraîchissement

Une simple boucle qui parcourt les billes du tableau et qui demande update et display pour chacune.

void draw() {
  background(250); // en niveau de gris
  for (int i=0; i<N; i++) {
      billes[i].update();
      billes[i].display();
  }
}

Code complet

final int N = 100;
final float g = 0.05;
final float r = 0.8;

Bille[] billes = new Bille[N];

void setup() {
  size(600, 400);
  for (int i=0; i<N; i++) {
    float x0 = random(600);
    float y0 = random(200);
    float d0 = 2 + random(20);
    billes[i] = new Bille(x0, y0, d0);
  }
}

void draw() {
  background(250); // en niveau de gris
  for (int i=0; i<N; i++) {
      billes[i].update();
      billes[i].display();
  }
}

class Bille {
  float x, y, vy, d;
  Bille(float x0, float y0, float d0) {
    d = d0;
    x = x0;
    y = y0;
    vy = 0;
  }
  
  void update() {
      vy += g;
      y += vy;
      if (y > height) {
        // rebond
        float depassement = y - height;
        y = height- r*depassement;
        vy = -r*vy;
      }
  }
  
  void display() {
    circle(x, y, d);
  }
}
nsi/langages/processing/billes_qui_rebondissent.txt · Dernière modification : de goupillwiki