La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

Programmation Objet en JAVA Cours 10 : Projet de Programmation, retour sur le partiel.

Présentations similaires


Présentation au sujet: "Programmation Objet en JAVA Cours 10 : Projet de Programmation, retour sur le partiel."— Transcription de la présentation:

1 Programmation Objet en JAVA Cours 10 : Projet de Programmation, retour sur le partiel

2 Partiel : le sujet Un graphe non-orienté : –les noeuds ou sommets (Vertex, Vertices) : les clients –les arcs sont pondérés par la distance entre les 2 noeuds –Le graphe est connexe : il existe un chemin entre tous couples de sommet. Lobjectif : trouver larbre couvrant minimal,

3 Partiel : le sujet - suite Représentation du graphe : –chaque sommet est repéré par un entier de 0 à n-1 –un arc contient 3 entiers : org, dest, longueur. –le graphe se représente par un tableau succ[i] qui contient les successeurs du noeud i stocké par une liste chaînée Les classes : –Arc : un arc –Liste : une liste chaînée contenant la valeur stockée (un arc) et une référence sur lélément suivant (une Liste) –Graphe qui contient Liste[] succ Remarque : le graphe est non-orienté, un arbre est orienté (implicitement).

4 La frontière, larbre La frontière regroupe lensemble des arcs dont lorigine est dans larbre couvrant : les candidats pour la construction de larbre Construction du graphe en maintenant la frontière : –init : ajouter un arc (-1,i,0) -> le noeud i est la racine de larbre couvrant. –Boucle de 1 à n-1: extraire larc de coût minimale de larbre, son origine est x –ajouter dans la frontière tous les arcs dont lorigine est x (grâce au tableau succ) Les fonctions à écrire : –void ajouter(Arc a) –Arc extraireMin() qui doit également retirer larc de la frontière –Le main

5 Projet : passage à linterface graphique

6 Le point sur lavance La 4ème semaine du projet : – cest bientôt fini –Déjà = 40 points dassignés, la moitié Où vous devez en être. –Le moteur doit être (presque fini) –Tester les tours de jeu : en mode console (long) faire un main qui simule une partie en 2 tours en faisant des choix aléatoire ou systématique –Le moteur doit être terminé avant la semaine prochaine Semaine 5 : réfléchir à linterface graphique Faire le point sur les dépôts avec votre chargé de TP !!!

7 Interface graphique - feuille de route Il y a 2 aspects importants dans le développement de lIG : –représenter linformation –mettre en place les interactions avec lutilisateur Avant tout dessiner linterface pour sassurer que toute linformation soit présente. Par exemple prévoir 3 panneaux : –représentation du plateau –panneau dinformation (où on en est, à qui de jouer, quelle est la tâche,... ) –panneau de contrôle (affiche par exemple les cartes du joueur, les pions de transport lors de la préparation des déplacements) Pour les panneau de contrôle et dinformation, cest assez simple. Que faire pour le panneau « plateau » ? Quelles sont les interactions ? et comment les mettre en oeuvre Pensez au JScrollPane !

8 Interface graphique - visualisation Les informations à visualiser : –Les pions visibles pour tous les joueurs –Le pion caché pour le joueur dont cest le tour –Les cartes Voyages du joueur courant –Quelles sont les villages traversés par chaque joueur –Le score de chaque joueur ? Attention : –si 2 routes ont même départ et arrivée ? penser à en dessiner une différemment.

9 Interface graphique : les interactions Le joueur doit pouvoir sélectionner un de ses pions de transport ou une de ses cartes Voyages : –pour placer les pions sur le plateau –payer ses voyages –se défausser en fin de tour Il doit aussi pouvoir sélectionner une route lors de ses déplacement.

10 Panneau « plateau » - solution 1 Prévoir un simple JPanel, et redéfinir la méthode paint pour dessiner intégralement le contenu du plateau PlateauGraphique extends JPanel et contient une référence sur le plateau. Simple si on prévoit : –Pour chaque classe du Plateau, une extension graphique qui prend en charge le dessin de chaque élément : Ville -> VilleGraphique -> contient une méthode paint() –Le dessin du PlateauGraphique fait une boucle sur tous les éléments. Comment réaliser les interactions ?

11 Panneau « plateau » - solution 1 - interaction Le problème est la gestion des événements lié au plateau graphique. –avec un seul panneau et aucun composant graphique comment connaître la route sélectionnée ? –Une solution difficile : faire un calcul savant à partir des coordonnées du clique. –Une solution facile mais moins élégante : utiliser des JDialog Pour la sélection de la route, faire apparaître un JDialog avec la liste des routes partant du Village position du joueur. Pour la sélection du pion à poser, faire pareil ou utiliser le panneau de contrôle -> prévoir des JButton ou autre.

12 Panneau « plateau » - solution 2 Prévoir un JPanel où sera placer « à la main », sans passer par un LayoutManager, un composant graphique par élément du plateau. PlateauGraphique extends JPanel et contient une référence sur le plateau. Chaque élément est un composant : le plus simple est JComponent. –Village -> VillageGraphique extends JComponent, avec une référence sur le Village –de même Route -> RouteGraphique extends JComponent Simple si on prévoit : –Pour chaque classe du Plateau, une extension graphique qui prend en charge le dessin de chaque élément : Ville -> VilleGraphique -> contient une méthode paint() –Le dessin du PlateauGraphique fait une boucle sur tous les éléments. Comment réaliser les interactions ?

13 Interlude : dessin des composants, rappels et précisions

14 Dessin des composants Une fenêtre (ou un panneau) est un canevas sur lequel lapplication dessine ou peint : –Les composants de lAPI, cest déjà fait. –Le reste, cest à vous de faire. JButton

15 Pixel = picture element

16 Fenêtre et sous-fenêtre Chaque composant possède son espace de dessin : sa sous-fenêtre, subwindow Subwindow = Aire rectangulaire dans le composant parent avec son propre système de coordonnées Clipping, les règles : un composant ne peut peindre hors de sa sous fenêtre Sur un de ses composants. (0,0) (w p, h p ) (0,0) (w b, h b ) JPanel JButton

17 Le système de coordonnées Presque du cartésien : Ywindow = heigth - Ycartesien Pour chaque fenêtre et chaque sous-fenêtre, un système de coordonnées qui lui est propre. (0,0) (width,0) (0,height)(width, height)

18 Mon propre composant graphique Hérite de Component, JComponent ou JPanel Redéfinir la fonction void paint (Graphics G_Arg) { Graphics2D g2 = (Graphics2D) G_Arg; } Hérite de repaint() pour lancer paint(…) –Asynchrone, gestion automatique du Graphics Décide de sa stratégie : setDoubleBuffered(b) Hérite de méthodes externes dont il faut tenir compte –setSize(), setEnable(), setBackground(), setFont(), setForeground(), etc.

19 Dessin avec Graphics2D Fonction public void paint(Graphics g ) appelé par Java –Mais Graphics = Graphics2D depuis... –Transtypage : Graphics2D g2 = (Graphics) g; Etat de dessin plus élaboré (attributs) –Paint : peinture (Color, GradientPaint ou TexturePaint) –Font : police de caractère –Clip : zone de restriction du dessin –Stroke : pinceau = forme, épaisseur (1p), joins aux angles –Transform : Matrice affine de transformation Translation, rotation, zoom, penchant –Composite : règle de superposition dun pixel de couleur avec un autre –Liste de RenderingHint définissant la qualité de rendu

20 Peinture, mode demploi import java.awt.Graphics import java.awt.Graphics2D// Java2 1. récupérer le graphics context du composant Graphics g = myJPanel.getGraphics( ); Graphics2D g2 = (Graphics2D) g; 2. Peindre g2.drawLine(x1,y1, x2,y2);

21 Peinture, exemples de « draw » et « fill » Point (x,y) Line (pt1,pt2) PolyLine (pt list) Arc Oval (pt, w,h) Rectangle (pt, w,h) RoundRectangle Polygon (pt list) Image (file, x,y) Text (string, x,y) label

22 Quand repeindre ? Lécran est une feuille de dessin unique –Toutes les fenêtres sont peintes sur la même feuille. –All windows paint on the same surface! –Les fenêtres ne se souviennent pas de ce quelle cache. –Besoin de repeindre, dès quune nouvelle zone de lécran apparait. repaint eventsReceive Repaint events ouverture, changement de dimension, mise au premier (ou arrière) pla. quand dautre fenêtre viennent modifier lécran Mais plus si vous le jugez nécessaire

23 Peinture en Java : repaint Repaint event: Les composants Java Swing attrapent les événements repaint appel des méthodes paintComponent( ) héritage dun composant et redéfinition de paintComponent() Appel explicite : repaint( ) --> paintComponent( )

24 Nouveau composant, un exemple public class MyPanel extends JPanel { public void paintComponent(Graphics g){ super.paintComponent(g); // erases background Graphics2D g2 = (Graphics2D)g; //cast for java2 // my graphics: g2.setColor(new Color(255,0,0)); g2.fillRect(10,10,200,50); g2.setColor(new Color(0,0,0)); g2.drawString("Hello World", 10, 10); } Hello World

25 Mise en place dun composant Comment placer « à la main » un composant : –La méthode setBounds héritée de awt.Component: Moves and resizes this component. The new location of the top-left corner is specified by x and y, and the new size is specified by width and height. Puis il faut dessiner lespace réservé : paintComponent Attention, la zone de dessin est un rectangle ! Pour la sélection ? Zone à problème Zone de sélection par défaut

26 Redéfinir contains public boolean contains(int x, int y) Gives the UI delegate an opportunity to define the precise shape of this component for the sake of mouse processing. En redéfinissant cette méthode, on peut spécifier la «zone» concernée par le composant (zone de clique) Attention on peut donc distinguer la zone à dessiner (setBounds) et la zone dinteraction (redéfinition de contains).

27 DoubleBufferring Dessiner tous un composant sur une image hors-écran : –Paint background color –Paint shapes Puis, dessiner limage résultante dans le JPanel Swing le fait pour vous !!

28 Interlude : fin, retour au projet

29 Solution 2 - suite et fin Le PlateauGraphique est un JPanel à vous dy placer « à la main » vos propres composants pour les villes, routes, rivières,.... –Utiliser setBounds pour placer les composants dans lespace du JPanel –Redéfinir contains pour indiquer la zone dinteraction du composant –Utiliser un MouseListener

30 Solution 3 - à mi chemin Le PlateauGraphique est un JPanel –La méthode paintComponent dessine les villages, routes,... –Ajout à la main de composant graphique (JButton ou JLabel,...) sur les routes afin de les sélectionner


Télécharger ppt "Programmation Objet en JAVA Cours 10 : Projet de Programmation, retour sur le partiel."

Présentations similaires


Annonces Google