package animationPersonnages; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Dimension; import java.awt.Graphics; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.Random; import javax.swing.JButton; import javax.swing.JPanel; import personnages.BonhommeRVFixe; import personnages.Personnage; class DessinRendezVousFixe extends JPanel{ private static final long serialVersionUID = 1L; private IHMRendezVousFixe panneau; protected int largeur=600; protected int hauteur=400; DessinRendezVousFixe(IHMRendezVousFixe panneau) { this.panneau = panneau; setPreferredSize(new Dimension(largeur, hauteur)); } public void paintComponent(Graphics g) { super.paintComponent(g); if (panneau.isBut()) { g.setColor(Color.GREEN); g.drawLine(panneau.getCible() - largeur/10, 4 * hauteur/5, panneau.getCible() + largeur/10, 4 * hauteur / 5); } if (panneau.getBonhommeG() != null) panneau.getBonhommeG().dessiner(g); if (panneau.getBonhommeD() != null) panneau.getBonhommeD().dessiner(g); } } public class IHMRendezVousFixe extends JPanel implements ActionListener, Runnable { private static final long serialVersionUID = 1L; private BonhommeRVFixe bonhommeG; private BonhommeRVFixe bonhommeD; private JButton creer=new JButton("creer"); private JButton demarrer=new JButton("demarrer"); public static Random aleat; private int cible; private boolean but = false; private DessinRendezVousFixe dessin = new DessinRendezVousFixe(this); static { aleat=new Random(); } public IHMRendezVousFixe() { JPanel panneauBoutons = new JPanel(); setLayout(new BorderLayout(5, 5)); creer.addActionListener(this); panneauBoutons.add(creer); demarrer.addActionListener(this); panneauBoutons.add(demarrer); setBackground(Color.WHITE); add(panneauBoutons, BorderLayout.NORTH); add(dessin, BorderLayout.CENTER); Thread.currentThread().setPriority(Thread.MAX_PRIORITY); } public boolean isBut() { return but; } public int getCible() { return cible; } public BonhommeRVFixe getBonhommeG() { return bonhommeG; } public BonhommeRVFixe getBonhommeD() { return bonhommeD; } public void actionPerformed(ActionEvent e) { int vitesse; if (e.getSource() == creer) { cible = dessin.largeur / 5 + Math.abs(aleat.nextInt() % (3 * dessin.largeur / 5)); but = true; if (((bonhommeG != null) && (bonhommeG.isAlive()))|| ((bonhommeD != null) && (bonhommeD.isAlive()))) return; if (bonhommeG != null) bonhommeG.supprimer(); vitesse=50 + Math.abs(aleat.nextInt() % 100); bonhommeG = new BonhommeRVFixe(dessin, dessin.largeur / 20, 2 * dessin.hauteur / 3, 40, Color.BLUE, cible); bonhommeG.setDirection(Personnage.DROITE); bonhommeG.setVitesse(vitesse); if (bonhommeD!=null) bonhommeD.supprimer(); vitesse=30 + Math.abs(aleat.nextInt() % 100); bonhommeD = new BonhommeRVFixe(dessin, 19 * dessin.largeur / 20, 2* dessin.hauteur / 3, 40, Color.RED, cible); bonhommeD.setDirection(Personnage.GAUCHE); bonhommeD.setVitesse(vitesse); bonhommeG.setPartenaire(bonhommeD); bonhommeD.setPartenaire(bonhommeG); dessin.repaint(); } else if (e.getSource() == demarrer) { if (bonhommeG == null) return; if (bonhommeD == null) return; bonhommeG.start(); bonhommeD.start(); new Thread(this).start(); } } public void run() { try { bonhommeG.join(); bonhommeD.join(); } catch(InterruptedException exc){ exc.printStackTrace(); } but = false; dessin.repaint(); } }