ho cercato in lungo e in largo sia su questo forum che in altri, ma non ho trovato nessuna soluzione ora vi posto il codice della mia classe principale e del main, premetto che il mio progetto riguarda un circuito automobilistico in cui ho un rettangolo(la macchinina) che si muove in un circuito fatto da linee, il mio problema è riuscire a far si che quando la mia macchinina tocca una di queste linee/bordo torni all'inizio del percorso

codice:
/**
 * @author De Bacco Giacomo
 * @version 1.3 Ultima modifica: 2011/5/31
 */
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.border.*;
import java.awt.geom.*;
import java.awt.Dimension.*;
import java.awt.Graphics.*;
import java.awt.Image.*;
import javax.swing.ImageIcon.*;
/**
 *
 * finestra contenente un pannello
 *
 */
class MyFrame extends JFrame
{
    MyFrame(int x0, int y0, int larghezza, int altezza)
    {
        // settaggio caratteristiche della finestra
        setBounds(x0,y0,larghezza,altezza);
        setBackground(new Color(0,0,250));
        setTitle(getClass().getName());
        setResizable(false);
        setVisible(true);


        // viene aggiunto un ascoltatore per poter chiudere il frame
        addWindowListener(new WindowAdapter()
            {
                public void windowClosing(WindowEvent e)
                {
                   System.out.println("Fine dell'applicazione\n");
                   System.exit(0);  // chiusura dell'applicazione
                } // [m] windowClosing
            }
        );


    } // [c] MyFrame
} // [class] MyFrame
/**
 * pannello su cui disegnare
 *
 */
class MyPanel extends JPanel implements KeyListener
{
    // ## VARIABILI ##
    public static int inc=7;  // incremento o decremento per alcuni cicli
	final static BasicStroke Stroke = new BasicStroke(1.0f);
    final static BasicStroke wideStroke = new BasicStroke(8.0f);
    final static BasicStroke cofanStroke = new BasicStroke(3.0f);
	//variabili circuito
	public static int Iniziox=30;
	public static int Inizioy=30;
	public static int Finex=700;
	public static int Finey=500;
    // Coordinate MACCHINA
    public static int X=30;
    public static int Y=45;
    public static int X2=30;
    public static int Y2=45;
    // Variabili per la tastiera
	String tasto;
	int Codice;




    // Valori rettangolo della MACCHINA
    int larghezzaR=25;
    int altezzaR=15;


    private Thread th;

    // ## END VARIABILI ##


    /**
     * costruttore
     */
    public MyPanel(int lar, int alt)
    {
        // settaggi di configurazione
        setSize(lar,alt);
        setBorder(new EtchedBorder());
        setBackground(new Color(255,255,255));
        setCursor(new Cursor(Cursor.CROSSHAIR_CURSOR));
        addKeyListener(this);
        //#### gestione degli eventi intercettati dal pannello ####

    } // [c] MyPanel

    /**
     * Ascoltatore eventi tastiera
     *
     */

    public void keyPressed(KeyEvent e)
      {
			//giocatore 1
   			 Codice= e.getKeyCode();
      	     tasto= e.getKeyText(Codice);

    		if(tasto=="Sinistra"){
      	     	X-=inc;
      	     }
      	     if(tasto=="Destra"){
      	     	X+=inc;
      	     }
      	     if(tasto=="Su"){
      	     	Y-=inc;
      	     }
      	     if(tasto=="Giù"){
      	     	Y+=inc;
      	     }


      	     repaint();

      }

      public void keyReleased(KeyEvent e){}
      public void keyTyped(KeyEvent e){}

    /**
     * ridisegno della parte grafica
     * (questo metodo viene richiamato automaticamente quando la finestra
     * deve essere ridisegnata (ad esempio quando viene sovrapposta
     * da un'altra)
     */
    public void paint(Graphics g)
    {
		Graphics2D g2 = (Graphics2D) g;
        super.paint(g);



        //percorso------------------------------------------------------
        Percorso per=new Percorso();
        per.disegna(g);
        //fine persorso------------------------------------------------------



        //macchina------------------------------------------------------
        Rettangolo rett=new Rettangolo(X,Y,larghezzaR,altezzaR,Color.RED);
        rett.disegna(g);


        //fina macchina------------------------------------------------------
    } // [m] paint

    //#### begin thread ####
    /**
     * - creazione del thread (new Thread())
     * - definizione del comportamento del thread (def. del metodo run())
     * - attivazione del thread (th.start())
     */
    public void attiva()
    {
       th = new Thread()
                {
                	                // ridefinizione del metodo run
                public void run()
                    {
                      for (;;)
                          {
                          try {
                              sleep(15000);
                              }
                          catch (InterruptedException e)
                              {
                              System.out.println("thread interrotto");
                              return;
                              }


                          } // for
                    }
                };

        th.start();
    } // [m] attiva

    //#### end thread ####

} // [class] My Panel
class Racing
{

    public static void main(String[] args)
    {
        // creazione finestra e componenti
        MyFrame f = new MyFrame(13,0,1280,800);  // contenitore top-level

        MyPanel p = new MyPanel(1180,750);        // pannello su cui disegnare

		Animazione a = new Animazione();



        p.setLocation(0,0);
		a.setLocation(100,750);





        // attacco del pannello di disegno
        f.setLayout(null);  // altrimenti il pannello invade tutta la finestra
        f.add(p);           // attacco del pannello alla finestra
		f.add(a);



        p.attiva();

        // visualizazzione
        f.setVisible(true);

        p.repaint();
        p.requestFocus();


    } // [m] main
} // [class] Swing03
vi ringrazio in anticipo, se trovate una soluzione mi risolvereste molti problemi