import javax.swing.JApplet;
import java.awt.Graphics;
import java.awt.Point;
import javax.swing.Timer;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.util.Vector;
import java.util.Date;
// Vecteur 2D (float)
class Vecteur2D
{
float x,y;
Vecteur2D(float _x,float _y)
{
x=_x;y=_y;
}
}
// Une classe pour representer des balles
class Balle
{
private Vecteur2D position;
private Vecteur2D vitesse;
private float rayon;
void dessiner(Graphics g)
{
g.fillOval((int)(position.x-rayon),
(int)(position.y-rayon),
(int)rayon*2,(int)rayon*2);
}
void avancer(float dt)
{
position.x+=vitesse.x*dt;
position.y+=vitesse.y*dt;
vitesse.y+=3;
}
void verifierCollision(int largeurEcran,int hauteurEcran)
{
if(position.x-rayon<0 && vitesse.x<0){vitesse.x*=-1;}
if(position.y-rayon<0 && vitesse.y<0){vitesse.y*=-1;}
if(position.x+rayon>largeurEcran && vitesse.x>0){vitesse.x*=-1;}
if(position.y+rayon>hauteurEcran && vitesse.y>0){vitesse.y*=-1;}
}
Balle(Vecteur2D _position,float _rayon)
{
position=new Vecteur2D(_position.x,_position.y);
vitesse=new Vecteur2D(0,0);
rayon=_rayon;
vitesse=new Vecteur2D((float)Math.random()*20-10,(float)Math.random()*20-10);
}
}
public class AppletBalles extends JApplet implements ActionListener
{
Vector balles=new Vector();
Timer minuteur;
// instant du dernier appel de "repaint"
long dernierInstant;
// callback pour le minuteur
public void actionPerformed(ActionEvent evt) {repaint();}
public void init()
{
// creation de 4 balles
for(int i=0;i<4;i++)
{
Vecteur2D position=new Vecteur2D((float)Math.random()*getWidth(),
(float)Math.random()*getHeight());
balles.add(new Balle(position,
(float)Math.random()*10+5));
}
}
public void start()
{
System.out.println("start");
minuteur=new Timer(100,this);
minuteur.start();
}
public void paint(Graphics g)
{
g.clearRect(0, 0, getWidth(), getHeight());// Effacer l'écran
// combien de temps s'est ecoulé depuis qu'on redessiné
long actuel=new Date().getTime();
float dt=(actuel-dernierInstant)/1000.0f;
if(dernierInstant==0){dernierInstant=actuel;return;}
dernierInstant=actuel;
// Mettre a jour les balles et les dessiner
for(int i=0;i<balles.size();i++)
{
Balle balle=(Balle)(balles.get(i));
balle.verifierCollision(getWidth(),getHeight());
balle.avancer(dt);
balle.dessiner(g);
}
}
}