Corrigé du TP 4 : Animations

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);
        }
    }
 
}

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

*

Vous pouvez utiliser ces balises et attributs HTML : <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>