commentaire Menu et Easter Egg
This commit is contained in:
parent
28d9248fc7
commit
9e68723f91
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -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
|
||||
}
|
||||
}
|
||||
|
@ -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é
|
||||
}
|
||||
}
|
||||
|
@ -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());
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user