Teaching - 2i013

Enseignants


2i013 - Groupe 5 : Course de voiture

Récupération d'une liste de points

Petite introduction au évènement souris et aux classes anonymes (super moche... et super pratique)

public class MainListePoints {

    public static void main(String[] args)  {
        String filename = "track/1_safe.trk";
        Circuit track = CircuitFactoryFromFile.build(filename);

        JFrame fen = new JFrame();
        fen.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        final BufferedImage im = ToolsTerrain.imageFromCircuitGen(track, false); // aff horizontal
        final JLabel lab = new JLabel(new ImageIcon(im));
        fen.add(lab);
        final ArrayList<Vecteur> liste = new ArrayList<Vecteur>();

        // exemple de classe anonyme
        // 1) SUPER MOCHE... mais
        // 2) souvent pratique car on a accès aux informations du bloc
        // a condition de les définir static
        lab.addMouseListener(new MouseListener() {

            public void mouseReleased(MouseEvent e) {}
            public void mousePressed(MouseEvent e) {}
            public void mouseExited(MouseEvent e) {}
            public void mouseEntered(MouseEvent e) {}
            public void mouseClicked(MouseEvent e) {
                if(e.getButton() == 1) {
                    liste.add(new Vecteur(e.getX(),e.getY()));
                    for(Vecteur v:liste) System.out.print(v+" ");
                    System.out.println();
                    Graphics g = im.getGraphics();
                    g.drawOval(e.getX()-1, e.getY()-1, 2, 2);
                    lab.repaint();
                    // ATTENTION: les coordonnées sont dans le repère image, pas le repère modèle
                }              
            }
        });

        //////////////////////

        fen.setVisible(true);
        fen.pack();
   }

}

Possibilités annexes (en fonction de vos besoins):

  • sauver la liste de points dans un fichier
  • corriger la liste à la volée avec le second clic
  • ordonner la liste en fonction du score dijkstra des points dans la circuit (très intéressant à faire !!!)

Strategy Composite

Comme nous l'avons vu dans le cours, les usages des strategies composites sont multiples. C'est à vous de savoir ce que vous voulez en faire!

Cette section à juste vocation à vous permettre de récupérer facilement le code des transparents

public class StrategySelector implements Strategy{// C'est une stratégie!
   private ArrayList<Strategy> liStrategy; // Tout abstrait !
   private ArrayList<Selector> liSelect;

   public StrategySelector(){
      liStrategy = new ArrayList<Strategy>();
      liSelect = new ArrayList<Selector>();
   }

   // Plutot sécurisé: on est sur qu'il y a concordance
   public void add(Strategy str, Selector select){
      liStrategy.add(str); liSelect.add(select);
   }

   public Commande getCommande() {
      for(int i=0; i<liStrategy.size(); i++){
         if(liSelect.get(i).isSelected())
            return liStrategy.get(i).getCommande();
      }
      // normalement on ne passe pas ici...
      return liStrategy.get(liStrategy.size()-1).getCommande();
   }

}