diff --git a/projetAgile/src/fr/iutfbleau/projetAgile/Menu/Controller/ObservateurAccueil.java b/projetAgile/src/fr/iutfbleau/projetAgile/Menu/Controller/ObservateurAccueil.java index 17e166f..258e2f6 100644 --- a/projetAgile/src/fr/iutfbleau/projetAgile/Menu/Controller/ObservateurAccueil.java +++ b/projetAgile/src/fr/iutfbleau/projetAgile/Menu/Controller/ObservateurAccueil.java @@ -2,18 +2,25 @@ package fr.iutfbleau.projetAgile.Menu.Controller; import java.awt.event.*; -import javax.swing.JButton; import javax.swing.JOptionPane; import fr.iutfbleau.projetAgile.Menu.View.Menu; +/** + * Class de l'observateur du Bouton Acceuil des Jeux + */ public class ObservateurAccueil implements ActionListener{ - public ObservateurAccueil(){} - + /** + * Fonction lors du clique + * retourne au menu après confirmation + */ + @Override public void actionPerformed(ActionEvent evenement){ - JButton e = (JButton) evenement.getSource(); - int confirmation = JOptionPane.showConfirmDialog(e.getRootPane(), "Etes-vous sûr de vouloir retourner au menu ?", "Menu", JOptionPane.YES_NO_OPTION); - if(confirmation != JOptionPane.YES_OPTION) return; - Menu.show(Menu.MENU); + //On affiche la confirmation en bloquant la fentre + int confirmation = JOptionPane.showConfirmDialog(Menu.getFrame(), "Etes-vous sûr de vouloir retourner au menu ?", "Menu", JOptionPane.YES_NO_OPTION); + //si c'est ok on retourne au Menu + if(confirmation == JOptionPane.YES_OPTION){ + Menu.show(Menu.MENU); + } } } diff --git a/projetAgile/src/fr/iutfbleau/projetAgile/Menu/Controller/ObservateurFenetre.java b/projetAgile/src/fr/iutfbleau/projetAgile/Menu/Controller/ObservateurFenetre.java index b9b1758..1b2e1fa 100644 --- a/projetAgile/src/fr/iutfbleau/projetAgile/Menu/Controller/ObservateurFenetre.java +++ b/projetAgile/src/fr/iutfbleau/projetAgile/Menu/Controller/ObservateurFenetre.java @@ -5,32 +5,74 @@ import javax.swing.JFrame; import javax.swing.JOptionPane; import java.awt.event.WindowEvent; +/** + * Class de l'observateur de la fenetre + * Utiliser pour avoir une fentre modal pour confirmer la fermeture + */ public class ObservateurFenetre implements WindowListener{ + //il doit connaitre la fenetre pour faire une fenetre modale private JFrame fenetre; + /** + * Constructeur + * @param fenetre0 la fentre qui va instancier la fentre modale + */ public ObservateurFenetre(JFrame fenetre0){ this.fenetre=fenetre0; } + /** + * fentre au premier plan + * */ + @Override public void windowActivated(WindowEvent evenement){ - } // premier plan + } + /** + * Aprèes fermeture de la fentre + * */ + @Override public void windowClosed(WindowEvent evenement){ - } // après fermeture + } + /** + * Avant fermeture de la fentre + * On affiche la fentre Modale + */ + @Override public void windowClosing(WindowEvent evenement){ + //On demande la Confirmation avec un JOptionPane int confirmation = JOptionPane.showConfirmDialog(this.fenetre.getContentPane(), "Etes-vous sûr de vouloir fermer la fenetre ?", "Quitter", JOptionPane.YES_NO_OPTION); - if(confirmation != JOptionPane.OK_OPTION) return; - this.fenetre.dispose(); - } // avant fermeture + //Si c'est ok + if(confirmation == JOptionPane.OK_OPTION){ + //on ferme la fentre + this.fenetre.dispose(); + } + } + /** + * Passage en arrière plan + */ + @Override public void windowDeactivated(WindowEvent evenement){ - } // arrière-plan + } + /** + * Restauration de la fentre + */ + @Override public void windowDeiconified(WindowEvent evenement){ - } // restauration + } + /** + * Minimisation de la fentre + */ + @Override public void windowIconified(WindowEvent evenement){ - } // minimisation + } + /** + * Après Ouverture de la fentre + */ + @Override public void windowOpened(WindowEvent evenement){ - } // après ouverture + } } diff --git a/projetAgile/src/fr/iutfbleau/projetAgile/Menu/Controller/ObservateurMenuSouris.java b/projetAgile/src/fr/iutfbleau/projetAgile/Menu/Controller/ObservateurMenuSouris.java index f32cc31..0a11adc 100644 --- a/projetAgile/src/fr/iutfbleau/projetAgile/Menu/Controller/ObservateurMenuSouris.java +++ b/projetAgile/src/fr/iutfbleau/projetAgile/Menu/Controller/ObservateurMenuSouris.java @@ -5,34 +5,74 @@ import java.awt.event.*; import fr.iutfbleau.projetAgile.Menu.View.*; /** - * Observateur des Boutons du Menu + * Observateur des Boutons du Menu (des Jeu) */ public class ObservateurMenuSouris implements MouseListener{ /** - * Constructeur + * Fonction s'effectuant au clique + * lance le Jeu si il est Dispnnible */ - public ObservateurMenuSouris(){ - } + @Override public void mouseClicked(MouseEvent evenement){ + //on incrémente le nombre de clique + Menu.addClique(); + //On récupère le Composant BoutonsMenu bout=(BoutonsMenu) (evenement.getComponent()); + //Si c'est le jeu PUISSANCE 4 if(bout.getPath()==Menu.PUISSANCE_4){ + //On dis au Menu de'afficher le Jeu PUISSANCE 4 Menu.show(Menu.PUISSANCE_4); + return; } - } // un bouton cliqué + //Les autre jeu suiverons le même fonctionnement que PUISSANCE 4 + } + /** + * Fonction quand la souris etre dans la zone du JComponent + * pour inquer au joueur le survol + */ + @Override public void mouseEntered(MouseEvent evenement){ + //On récupere le composant BoutonsMenu bout=(BoutonsMenu) (evenement.getComponent()); + //on lui indique le survol bout.setSurvol(true); - } // debut du survol + } + /** + * Fonction quand la souris quite la zone du JComponent + * pour inquer au joueur le survol + */ + @Override public void mouseExited(MouseEvent evenement){ + //on récupère le Composant BoutonsMenu bout=(BoutonsMenu) (evenement.getComponent()); + //on lui inqique le survol bout.setSurvol(false); - } // fin du survol + } + + /** + * Fonction lorsque on reste appuyer sur la Souris + * donne l'impression de clique + */ + @Override public void mousePressed(MouseEvent evenement){ + //On récupère le Composant BoutonsMenu bout=(BoutonsMenu) (evenement.getComponent()); + //Pour augmenter l'impression de clique + //On met le survol a false + //pour diminuer la taille du Composant bout.setSurvol(false); - } // un bouton appuyé + } + /** + * Fonction lorsque on relache la Souris + * donne l'impression de clique + * */ + @Override public void mouseReleased(MouseEvent evenement){ + //On récupère le Composant BoutonsMenu bout=(BoutonsMenu) (evenement.getComponent()); + //Pour augmenter l'impression de clique + //On met le survol a false + //pour diminuer la taille du Composant bout.setSurvol(true); - } // un bouton relâché + } } diff --git a/projetAgile/src/fr/iutfbleau/projetAgile/Menu/View/BoutonsMenu.java b/projetAgile/src/fr/iutfbleau/projetAgile/Menu/View/BoutonsMenu.java index b49bc9e..f832e29 100644 --- a/projetAgile/src/fr/iutfbleau/projetAgile/Menu/View/BoutonsMenu.java +++ b/projetAgile/src/fr/iutfbleau/projetAgile/Menu/View/BoutonsMenu.java @@ -53,26 +53,36 @@ public class BoutonsMenu extends JComponent{ } // maintenant on dessine ce que l'on veut String dispo; + //Si le jeu est disponnible if(this.disponibiliter==true){ + //on met la couleur et le String Correspondant secondPinceau.setColor(new Color(255,0,0,200)); dispo="Disponible"; + //Autrement }else{ + //on met une autre couleur et le String Correspondant secondPinceau.setColor(new Color(100,100,100,200)); dispo="Indisponible"; } + //Si le Menu est survoler: if(this.survol==false){ + //On draw l'image un peu plus Gros pour augmenter le resentis de survol secondPinceau.drawImage(this.img, 5, 5, this.getWidth()-10, this.getHeight()-10, this); secondPinceau.fillRoundRect(5, 5, this.getWidth()-10, this.getHeight()-10, this.getWidth()/100*9, this.getHeight()/100*29); + //Autrement }else{ + //On draw l'image plus petite secondPinceau.drawImage(this.img, 0, 0, this.getWidth(), this.getHeight(), this); secondPinceau.fillRoundRect(0, 0, this.getWidth(), this.getHeight(), this.getWidth()/100*9, this.getHeight()/100*29); } + //On met du blanc pour le titre secondPinceau.setColor(new Color(255, 255, 255)); + //On draw le titre du jeu dans une taille assez grosse et centrer secondPinceau.setFont(new Font(Font.SANS_SERIF, Font.BOLD, (this.getWidth()/10))); FontMetrics metrics = secondPinceau.getFontMetrics(secondPinceau.getFont()); secondPinceau.drawString(this.path.toUpperCase(), (this.getWidth()/2-metrics.stringWidth(this.path.toUpperCase())/2), (this.getHeight()-metrics.getHeight())/3+metrics.getAscent()); - //DISPO OU PAS + //DISPO OU PAS: On l'affiche aussi secondPinceau.setFont(new Font(Font.SANS_SERIF, Font.BOLD, (this.getWidth()/20))); metrics = secondPinceau.getFontMetrics(secondPinceau.getFont()); secondPinceau.drawString(dispo, (this.getWidth()/2-metrics.stringWidth(dispo)/2), (this.getHeight()-metrics.getHeight())/3*2+metrics.getAscent()); diff --git a/projetAgile/src/fr/iutfbleau/projetAgile/Menu/View/Menu.java b/projetAgile/src/fr/iutfbleau/projetAgile/Menu/View/Menu.java index 02d5dde..fe0b8ee 100644 --- a/projetAgile/src/fr/iutfbleau/projetAgile/Menu/View/Menu.java +++ b/projetAgile/src/fr/iutfbleau/projetAgile/Menu/View/Menu.java @@ -4,6 +4,7 @@ import java.awt.*; import javax.swing.JPanel; import javax.swing.JFrame; import javax.swing.JLabel; +import javax.swing.JOptionPane; import fr.iutfbleau.projetAgile.Jeu; import fr.iutfbleau.projetAgile.Menu.Controller.*; @@ -11,24 +12,37 @@ import fr.iutfbleau.projetAgile.Puissance4.LancementPuissance4; import java.awt.event.WindowListener; import java.util.concurrent.CancellationException; +/** + * Class Abstraite mais static + * Pouvant donc etre utiliser sans être connu + * elle permet de créer le Menu + */ public abstract class Menu{ - public static String PUISSANCE_4="puissance4"; - public static String MENU="Menu"; + /* Chaque Jeu aura sa variable final static ainsi que le menu + Ces variables sont utiliser pour changer de jeu ou retourner au menu avec la foction + show*/ + public final static String PUISSANCE_4="puissance4"; + public final static String MENU="Menu"; private static JFrame frame=new JFrame("Argile"); private static CardLayout cd=new CardLayout(); private static String JEU="Jeu"; + private static int cliqueCount=0; /** * methode static pour avoir le JPanel Affichant le Menu * @return un JPanel instancier avec les composant du menu - * */ public static JPanel InitMenu(){ + //On initialise le JPanel JPanel p=new JPanel(); p.setBackground(new Color(31,31,31)); GridBagLayout gbl=new GridBagLayout(); p.setLayout(gbl); + //On utilisera un GridBagLayout pour plus de liberter dans le positionnement + //des éléments du menu + GridBagConstraints gbc=new GridBagConstraints(); + //On positionne le titre gbc.gridx=0; gbc.gridy=0; gbc.gridwidth=3; @@ -38,14 +52,18 @@ public abstract class Menu{ gbc.weightx=2; gbc.weighty=0; gbc.insets=new Insets(0,10,0,10); + //on créer le titre JLabel titre=new JLabel("ARGILE GAMES"); titre.setHorizontalAlignment(JLabel.CENTER); titre.setForeground(new Color(255,255,255)); titre.setBackground(new Color(55,55,55)); titre.setFont(new Font("Serif" ,Font.BOLD, 50)); + //on set sa préferedSize car le GridBagLayout en tiendra compte titre.setPreferredSize(new Dimension(400,200)); + //On ajoute le titre p.add(titre, gbc); + //On créer les élément du jeu(JComponent) BoutonsMenu puissance_4=new BoutonsMenu(Menu.PUISSANCE_4, true); BoutonsMenu echecs=new BoutonsMenu("echecs", false); BoutonsMenu dames=new BoutonsMenu("dames", false); @@ -58,6 +76,7 @@ public abstract class Menu{ BoutonsMenu minecraft=new BoutonsMenu("minigolf", false); BoutonsMenu puzzle=new BoutonsMenu("puzzle", false); + //On y ajoute leurs observateurs ObservateurMenuSouris obser=new ObservateurMenuSouris(); puissance_4.addMouseListener(obser); echecs.addMouseListener(obser); @@ -71,6 +90,8 @@ public abstract class Menu{ minecraft.addMouseListener(obser); puzzle.addMouseListener(obser); + + //on les ajoute au panneau en précisant leurs positions avec le GridBagConstraints p.add(puissance_4, Menu.GridBagConstraintsRetour(0, 1)); p.add(echecs, Menu.GridBagConstraintsRetour(1, 1)); p.add(dames, Menu.GridBagConstraintsRetour(2, 1)); @@ -82,12 +103,15 @@ public abstract class Menu{ p.add(CoD, Menu.GridBagConstraintsRetour(0, 3)); p.add(minecraft, Menu.GridBagConstraintsRetour(1, 3)); p.add(puzzle, Menu.GridBagConstraintsRetour(2, 3)); + + //On a fini, on retourne le panneau return p; } /** * methode priver pour calculer la positions des composants - * + * comme il se répartisent en ligne et collonne les arguments devant être connu sont donc + * la ligne et la collonne du composant * @return le GridBagConstraints correspondants aux arguments * @param collonne sa place dans la collonne * @param ligne sa ligne @@ -103,6 +127,7 @@ public abstract class Menu{ gbc.weightx=1; gbc.weighty=1; Insets marge=new Insets(0,0,0,0); + //La Marge est différente en Fonction de la position du composant if(collonne==0){ marge.set(5, 50, 5, 5); } @@ -130,6 +155,7 @@ public abstract class Menu{ * * @param g * le string de la carte correspondant + * devant être un String de la class Menu */ public static void show(String g) @@ -153,21 +179,39 @@ public abstract class Menu{ } } /** - * getter pouvant initialiser la JFrame + * getter pouvant initialiser la JFrame si elle n'a jamais été utiliser + * * @return * la fenetre */ public static JFrame getFrame(){ + //Si la JFrame n'a pas le layout désirer + //Elle n'a donc pas été initialiser if(Menu.frame.getLayout()!=Menu.cd){ + //On l'initialise Menu.frame.setLayout(Menu.cd); Menu.frame.setMinimumSize(new Dimension(1280,720)); Menu.frame.setLocation(200,200); } + //Si la fenetre n'as pas de WindowListeners WindowListener[] wl=Menu.frame.getWindowListeners(); if(wl.length==0){ + //On l'initalise Menu.frame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE); Menu.frame.addWindowListener(new ObservateurFenetre(Menu.frame)); } + //finalement on retourne la Fenetre return Menu.frame; } + + /** + * Methode comptant les clique effectuer sur les Composant du menu (Jeu) + * elle est juste un petit easterEgg affichant un bravo tout les 100 clique + */ + public static void addClique(){ + Menu.cliqueCount++; + if(Menu.cliqueCount%100==0){ + JOptionPane.showMessageDialog(frame, "Bravo vous avez cliquer "+String.valueOf(Menu.cliqueCount)+" fois", "Bravo !", JOptionPane.INFORMATION_MESSAGE); + } + } } \ No newline at end of file