nsi:langages:processing:billes_qui_rebondissent
Table des matières
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
