import javax.swing.*;
import java.awt.*;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import java.awt.event.MouseEvent;
import java.awt.event.KeyListener;
import java.awt.event.KeyEvent;
import java.util.ArrayList;

public class Jeu {
    public static void main(String[] args) {
        JFrame frame = new JFrame("Fenetre");
        Plateau plateau = new Plateau(800, 400);
        frame.getContentPane().add(plateau);
        frame.getContentPane().addMouseListener(plateau);
        frame.getContentPane().addMouseMotionListener(plateau);
        frame.getContentPane().addKeyListener(plateau);
        frame.getContentPane().setFocusable(true);
        frame.getContentPane().setFocusTraversalKeysEnabled(false);
        frame.pack();
        frame.setVisible(true);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
}

class Plateau extends JPanel implements MouseListener, MouseMotionListener, KeyListener {
    private ArrayList<Bulle> bulles;

    public Plateau(int l, int h) {
        this.setPreferredSize(new Dimension(l, h));
        this.setBackground(new Color(200, 200, 200));
        bulles = new ArrayList<>();
    }

    @Override
    public void paintComponent(Graphics g) {
        super.paintComponent(g);
        for (Bulle b : bulles) {
            g.setColor(new Color(255, 0, 0, 127));
            g.fillOval(b.x - b.r, b.y - b.r, 2 * b.r, 2 * b.r);
        }
    }

    @Override
    public void mouseClicked(MouseEvent e) {
        System.out.println("Bouton clické" + e); 
    }
    @Override
    public void mouseEntered(MouseEvent e) {
        System.out.println("Entrée" + e); 
    }
    @Override
    public void mouseExited(MouseEvent e) {
        System.out.println("Sortie" + e); 
    }
    @Override
    public void mousePressed(MouseEvent e) {
        System.out.println("Bouton appuyé" + e); 
        bulles.add(new Bulle(e.getX(), e.getY(), 50));
        this.repaint();
    }
    @Override
    public void mouseReleased(MouseEvent e) {
        System.out.println("Bouton relaché" + e); 
    }

    @Override
    public void mouseDragged(MouseEvent e) {
        System.out.println("Souris glissée" + e); 
    }
    @Override
    public void mouseMoved(MouseEvent e) {
        System.out.println("Souris déplacée" + e);
        bulles.add(new Bulle(e.getX(), e.getY(), 20));
        this.repaint();
    }

    @Override
    public void keyPressed(KeyEvent e) {
        System.out.println("Touche appuyée" + e);
    }
    @Override
    public void keyReleased(KeyEvent e) {
        System.out.println("Touche relachée" + e);
    }
    @Override
    public void keyTyped(KeyEvent e) {
        System.out.println("Touche tapée" + e);
    }
}

class Bulle {
    public final int x, y, r;
    public Bulle(int x, int y, int r) {
        this.x = x; this.y = y; this.r = r;
    }
}
