Witam serdecznie wszystkich forumowiczów. Piszę applet w BlueJ, który zobrazuje poruszającą się piłkę po linij prostej, odbijającą od ścian, dodatkowo prędkość ma być ustawiana za pomocą wektora, oraz ma występować opóźnienie. Udało mi się stworzyć częściowy zarys tego projektu, jednak nie bardzo wiem jak zaimplementować tą wybieraną przez użytkownika prędkość początkową , oraz samo opóźnienie piłki ?? Wypadałoby by to uzależnić od czasu, tylko skąd go wziąć ? Jeżeli chodzi o ustawianie prędkości to użytkownik może wybrać dowolny punkt i wtedy wypadałoby obliczyć długość wektora i zamienić to na prędkość, jakiej metody do tego użyć ? Z prędkością traconą jakoś sobie poradziłem, ale proszę o podpowiedź w sprawie tych dwóch kwestiach. Wstawiam kod programu:

import java.applet.Applet;
import java.awt.*;
import java.awt.event.*;
import javax.swing.Timer;
 
 
public class Pilka extends Applet implements ActionListener
{
    int x=0;
    int y=250;
    int wielkosc_pilki  = 30;
    int predkosc   = 100;
    int opoznienie =  predkosc/5;
 
    private Image appletImage;
    private Graphics appletGraphics;
 
    public void init()
    {
        super.init();
    }
 
 
    public void start() 
    {
        Timer animationTimer = new Timer(60, this);
        animationTimer.start();
    }
 
    public void stop()
    {
        super.stop();
    }
 
    public void destroy()
    {
        super.destroy();
    }
 
 
    public void update(Graphics g)
    {
 
        {
            appletImage = createImage( this.getSize().width, this.getSize().height );
            appletGraphics = appletImage.getGraphics();
        }
 
        appletGraphics.setColor(getBackground());
        appletGraphics.fillRect(0, 0, this.getSize().width, this.getSize().height);
 
        appletGraphics.setColor(getForeground());
        this.paint( appletGraphics );
 
        g.drawImage(appletImage, 0, 0, this);
    }
 
    public void paint(Graphics g)
    {
        super.paint(g);
        this.setBackground(Color.BLUE);
        g.setColor(Color.RED);
        g.fillOval(this.x, this.y, wielkosc_pilki, wielkosc_pilki);
    }
 
 
    @Override
    public void actionPerformed(ActionEvent e)
    {
        if( (x+predkosc) > (this.getWidth()-wielkosc_pilki))
        {
            this.x = this.getWidth()-wielkosc_pilki;
            this.predkosc = -predkosc+opoznienie;
        }else if( x+predkosc  < wielkosc_pilki)
        {
            this.x = 0;
            this.predkosc  = -predkosc-opoznienie;
        }
        else
            this.x += predkosc ;
 
       
 
 
        this.repaint();
    }
}