Direction d'une balle

Effr -  
faseldi Messages postés 314 Statut Membre -
Bonjour,

Je voudrais savoir comment, en Java, réaliser la fonction suivante :
- la balle se trouve à une position initiale fixe
- L'utilisateur clique avec sa souris quelque part sur l'écran
- la balle prends cette direction (celle où l'utilisateur a cliqué)

Illustration :
http://img15.hostingpics.net/pics/739670Sanstitre.png

Merci d'avance pour vos réponses, et bonne soirée !

1 réponse

  1. faseldi Messages postés 314 Statut Membre 20
     
    Bonjour, voilà je t'ai fait un petit code qui devrait faire ce que tu souhaite!


    package effr;

    import java.awt.Graphics;
    import java.awt.Rectangle;
    import java.awt.event.MouseEvent;
    import java.awt.event.MouseListener;
    import javax.swing.JFrame;
    import javax.swing.JPanel;
    import javax.swing.event.MouseInputListener;

    public class Effr {
    private final JFrame frame;
    private final Balle balle;
    private int depX, depY;
    private final int height = 500;
    private final int width = 500;
    public Effr(){
    frame = new JFrame();
    frame.setSize(width,height);
    depX = 0;depY = 0;
    frame.addMouseListener(new MouseInputListener() {

    @Override
    public void mouseClicked(MouseEvent e) {
    int x = e.getX();
    int y = e.getY();
    depX = -Math.floorDiv(width,y);
    depY = Math.floorDiv(height,x);
    depX=depX==0?-1:depX;
    depY=depY==0?1:depY;
    if(balle.posX < x){
    depX=-depX;
    }
    if(balle.posY > y){
    depY=-depY;
    }
    System.out.println("click!");
    }

    @Override
    public void mousePressed(MouseEvent e) {
    }

    @Override
    public void mouseReleased(MouseEvent e) {
    }

    @Override
    public void mouseEntered(MouseEvent e) {
    }

    @Override
    public void mouseExited(MouseEvent e) {
    }

    @Override
    public void mouseDragged(MouseEvent e) {
    }

    @Override
    public void mouseMoved(MouseEvent e) {
    }
    });
    balle = new Balle(10,10);
    frame.add(balle);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setVisible(true);
    lancerJeu();
    }
    public void lancerJeu(){
    Thread t = new Thread(new Runnable() {

    @Override
    public void run() {
    while(true){
    balle.setBallLocation(balle.posX+depX, balle.posY+depY);
    try{
    Thread.sleep(100);
    }catch(InterruptedException e){
    break;
    }
    }
    }
    });
    t.start();
    }
    private class Balle extends JPanel{
    public int posX, posY;
    public Balle(int x, int y){
    posX=x;
    posY=y;
    }
    @Override
    public void paint(Graphics g){
    g.clearRect(0, 0, width, height);
    g.fillOval(posX, posY, 30, 30);
    }
    public void setBallLocation(int x, int y){
    posX = x;
    posY = y;
    repaint();
    }
    }
    public static void main(String[] args) {
    Effr e = new Effr();
    }

    }


    Bonne journée :)

    Edit : j'ai retiré la javadoc qui plantait la balise code de CCM
    0