1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99
| package applibulles;
import java.awt.Color;
import java.awt.Graphics;
import java.util.ArrayList;
import java.util.Random;
import javax.swing.JPanel;
public class Bulle extends Thread {
//la fenetre dans laquelle le disque se deplace
private ClicBulles panneauBulles;
//abscisse et ordonnee du centre du disque
private int abs, ord;
//largeur et hauteur de la fenetre dans laquelle la ebulle se d�place
private int largeur, hauteur;
//le rayon du disque
private int rayon;
//la couleur du disque
private Color couleur;
//param�tre qui regle la distance parcourue par le disque � chaque deplacement
private int pas;
//(alpha, beta) donne la direction du deplacement
private float alpha, beta;
//le temps (minimum) entre deux deplacements
private int pause ;
Random alea = new Random();
public Bulle(int x, int y, int l, int h, ClicBulles panneauBulles) {
abs = x;
ord = y;
largeur = l;
hauteur = h;
this.panneauBulles = panneauBulles;
rayon = (Math.abs(alea.nextInt())) % 15 + 3;
pas = (Math.abs(alea.nextInt())) % 5 + 1;
pause = (Math.abs(alea.nextInt())) % 100 + 1;
alpha = 2 * alea.nextFloat() - 1;
beta = 2 * alea.nextFloat() - 1;
couleur = new Color((Math.abs(alea.nextInt())));
System.out.println("bulle "+alpha+" "+beta+" "+pas) ;
}
//indique si le disque est totalement sorti de la fenetre
public boolean sortie() {
/*if ((abs + rayon < 0) || (abs + rayon > largeur)
||(ord + rayon < 0) || (ord - rayon > hauteur))
return true;*/
if ((abs< 0) || (abs> largeur)
||(ord< 0) || (ord> hauteur))
return true;
else return false;
}
//dessine le disque dans la couleur indiqu�e
public void dessiner(Graphics g) {
g.setColor(couleur);
g.fillOval(abs - rayon, ord - rayon,
2 * rayon, 2 * rayon);
}
/* deplace le disque depuis son point de d�part en
* suivant la direction (alpha, beta) jusqu'� ce
* qu'il sorte de la fenetre */
public void run() {
ArrayList<Bulle> mesBulles ;
float absF = abs, ordF = ord;
while (!sortie()){
absF += pas*alpha ; ordF += pas*beta ;
this.abs = (int) absF ; this.ord = (int) ordF ;
if ((this.abs < 2)||(this.abs > largeur -2)) { alpha = -alpha ;}
if ((this.ord < 2) || (this.ord > hauteur -2) ) { beta = -beta ;}
//System.out.println("Bulle : "+newx+" "+newy) ;
try {
this.sleep(pause) ;
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
panneauBulles.repaint();
//A COMPLETER
}
mesBulles = panneauBulles.getLesBulles() ;
synchronized(mesBulles) { mesBulles.remove(this); }
//panneauBulles.getLesBulles().remove(this);
//mesBulles.remove(this);
System.out.println("sorti"+mesBulles.size()) ;
}
} |
Partager