commentaire Menu et Easter Egg

This commit is contained in:
martins 2022-11-17 12:40:29 +01:00
parent 28d9248fc7
commit 9e68723f91
5 changed files with 174 additions and 31 deletions

View File

@ -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);
}
}
}

View File

@ -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
}
}

View File

@ -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é
}
}

View File

@ -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());

View File

@ -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);
}
}
}