ho urgentemente bisogno di una mano! ho fatto questo programma/gioco in java ora però dovrei far muovere i quadratini verso la barra. come faccio a farl muovere?

ecco il codice

codice:
import java.awt.*;
import java.awt.event.*;
import java.awt.geom.*;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.Vector;

import javax.imageio.ImageIO;
import javax.swing.*;

public class PerEsame extends JPanel implements ActionListener,MouseListener ,MouseMotionListener,KeyListener{
	
	static Shape barra;
	static int y = 400;
	static int x=0;
	static JTextField punti;
	static Vector proiettiliX;
    static Vector proiettiliY;
    static final int raggioProiettile = 5;
    static  int punteggio = 0;
    static Vector brick;
    //static Vector navi;
    static int tempoMax = 3000;
	
	
	public static void main(String [] a){
		
		JFrame finestra = new JFrame();
        finestra.setSize(800,800);
        finestra.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        JPanel principale = new JPanel();
        JPanel comandi = new JPanel();
        
        punti = new JTextField();
        punti.setText(punteggio+"");
        punti.setPreferredSize(new Dimension(100,20));
        
        proiettiliX = new Vector();
        proiettiliY = new Vector();
        brick = new Vector();
        
        comandi.add(punti);
        
        
        PerEsame pe=new PerEsame();
        
        pe.setFocusable(true);
        pe.addMouseMotionListener(pe);
        pe.addMouseListener(pe);
        pe.addKeyListener(pe);

        pe.setBackground(Color.WHITE);
        principale.setLayout(new BorderLayout());
        principale.add(pe,BorderLayout.CENTER);
        principale.add(comandi,BorderLayout.SOUTH);
        
        
        
        
        finestra.getContentPane().add(principale);
        finestra.setVisible(true);
        
        riempiBrick(pe);
        Timer t = new Timer(5,pe);
        t.start();
        
	}
	
	public void paint(Graphics g){
		
		super.paint(g);
		Graphics2D g2 = (Graphics2D)g;
		
		
		try{
			
			barra= new Rectangle2D.Double(this.getWidth()-20,y,10,50);
			
			g2.setColor(Color.BLACK);
            g2.fill(barra);
			
			
			
		}catch(Exception e){
			
		}
		
		for (int i=0;i<proiettiliX.size();i++){

            int x1 = ((Integer) proiettiliX.elementAt(i)).intValue();
            int y1 = ((Integer) proiettiliY.elementAt(i)).intValue();

            Shape circle = new Ellipse2D.Double(x1,y1,raggioProiettile,raggioProiettile);
            boolean preso = false;
            
            
            
            
            //crea proiettili e intersezione con asteroidi
            for (int j=0;j<brick.size();j++){
                Shape rect = (Rectangle2D) brick.elementAt(j);
                if (circle.intersects((Rectangle2D) rect)){
                    preso = true;
                    brick.remove(j);
                    proiettiliX.remove(i);
                    proiettiliY.remove(i);
                    punteggio++;
                }    
            }
            if (!preso){
                g2.fill(circle);
            }
        }
            
         //crea asteroidi   
        
        for (int j=0;j<brick.size();j++){
            g2.setColor(Color.RED);
            Shape rect = (Rectangle2D) brick.elementAt(j);
            g2.fill(rect);
            
        }
	}
	
	 public static void riempiBrick(JPanel p){
	    	
	    	//crea asteroidi

	        for (int i=0;i<50;i++){
	            int y = (int) (Math.random() * p.getWidth());
	            int x = (i*3);
	            Shape b = new Rectangle2D.Double(x,y,10,10);

	            brick.add(b);
	        }
	        
	    }


	
	public void mouseClicked(MouseEvent e) {
		
	}	
	public void mouseEntered(MouseEvent e) {
		
	}

	public void mouseExited(MouseEvent e) {
		
	}

	public void mousePressed(MouseEvent e) {
				
	}

	public void mouseReleased(MouseEvent e) {
				
	}

	public void mouseDragged(MouseEvent e) {
				
	}

	public void mouseMoved(MouseEvent e) {		
		
	}
	
	
	public void keyPressed(KeyEvent e) {
		
		if (e.getKeyCode() == KeyEvent.VK_UP){
			y=y-10;
			
		}if (e.getKeyCode() == KeyEvent.VK_DOWN){
			y=y+10;
			
		}
		
		if (e.getKeyCode()== KeyEvent.VK_SPACE){
			
			proiettiliX.add(new Integer(this.getWidth()-20));
	        proiettiliY.add(new Integer(y+25-(raggioProiettile/2)));

		}

		 this.repaint();	
	}


	public void keyReleased(KeyEvent e) {	
		
	}

	public void keyTyped(KeyEvent e) {
				
	}
	
	
	public void actionPerformed(ActionEvent arg0) {
		
		
		
	
		 for (int i=0;i<proiettiliX.size();i++){


	            int x1 = ((Integer) proiettiliX.elementAt(i)).intValue();
	            x1--;
	            if (x1>0){
	                proiettiliX.setElementAt(new Integer(x1), i);
	            } else {
	                proiettiliY.remove(i);
	                proiettiliX.remove(i);
	            }
	        }
		 
		/* for(int j=0;j<brick.size();j++){
			 
			 int x2=((Integer) brick.elementAt(j)).intValue();
			 x2++;
			 if (x2<0){
	                brick.setElementAt(new Integer(x2), j);
	            } else {
	                brick.remove(j);
	                //proiettiliX.remove(i);
	            }
		 }*/
		 
		 
	        punti.setText(punteggio + "");
	        tempoMax--;
	        if (tempoMax==0){
	            JOptionPane.showMessageDialog(null, "Tempo massimo scaduto: punteggio ottenuto "+punteggio+" punti");
	            System.exit(0);
	        }
	        this.repaint();
		
		
	}

}