diff --git a/projetAgile/Makefile b/projetAgile/Makefile index 25c8bfc..96180ca 100644 --- a/projetAgile/Makefile +++ b/projetAgile/Makefile @@ -1,4 +1,4 @@ -@JAVAC_OPT = -implicit:none \ +@JAVAC_OPT = -implicit:none -encoding UTF-8\ -d build -classpath "build:res/mariadb-client.jar" -sourcepath src PACKAGE = fr.iutfbleau.projetAgile PACKAGE_PATH = fr/iutfbleau/projetAgile diff --git a/projetAgile/src/fr/iutfbleau/projetAgile/Main.java b/projetAgile/src/fr/iutfbleau/projetAgile/Main.java index 00483fc..8f91775 100644 --- a/projetAgile/src/fr/iutfbleau/projetAgile/Main.java +++ b/projetAgile/src/fr/iutfbleau/projetAgile/Main.java @@ -1,10 +1,30 @@ package fr.iutfbleau.projetAgile; import javax.swing.*; +import javax.swing.border.EmptyBorder; +import javax.swing.border.TitledBorder; +import java.awt.Color; +import java.util.Enumeration; + import fr.iutfbleau.projetAgile.Menu.View.Menu; +import fr.iutfbleau.projetAgile.Puissance4.Utils.Constants; public class Main { public static void main(String[] args) { + UIManager.put("Button.background", Constants.RED); + UIManager.put("Button.foreground", Color.WHITE); + UIManager.put("OptionPane.background", Constants.BACKGROUND_COLOR); + UIManager.put("Panel.background", Constants.BACKGROUND_COLOR); + UIManager.put("Panel.foreground", Color.WHITE); + UIManager.put("Label.background", Constants.BACKGROUND_COLOR); + UIManager.put("Label.foreground", Color.WHITE); + UIManager.put("TextPane.foreground", Color.WHITE); + UIManager.put("OptionPane.messageForeground", Color.WHITE); + UIManager.put("RadioButton.background", Constants.BACKGROUND_COLOR); + UIManager.put("RadioButton.foreground", Color.WHITE); + UIManager.put("Button.focus", Constants.RED); + UIManager.put("Button.border", new EmptyBorder(5,10,5,10)); + JFrame frame = Menu.getFrame(); JPanel menu=Menu.InitMenu(); frame.add(menu, Menu.MENU); diff --git a/projetAgile/src/fr/iutfbleau/projetAgile/Menu/Controller/ObservateurAccueil.java b/projetAgile/src/fr/iutfbleau/projetAgile/Menu/Controller/ObservateurAccueil.java index 2429f8d..258e2f6 100644 --- a/projetAgile/src/fr/iutfbleau/projetAgile/Menu/Controller/ObservateurAccueil.java +++ b/projetAgile/src/fr/iutfbleau/projetAgile/Menu/Controller/ObservateurAccueil.java @@ -1,14 +1,26 @@ package fr.iutfbleau.projetAgile.Menu.Controller; import java.awt.event.*; + 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){ + //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); - if(confirmation == 1) return; - Menu.show(Menu.MENU); + //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 diff --git a/projetAgile/src/fr/iutfbleau/projetAgile/Puissance4/Controller/ColorActionListener.java b/projetAgile/src/fr/iutfbleau/projetAgile/Puissance4/Controller/ColorActionListener.java index 92da090..a577586 100644 --- a/projetAgile/src/fr/iutfbleau/projetAgile/Puissance4/Controller/ColorActionListener.java +++ b/projetAgile/src/fr/iutfbleau/projetAgile/Puissance4/Controller/ColorActionListener.java @@ -1,7 +1,7 @@ package fr.iutfbleau.projetAgile.Puissance4.Controller; -import fr.iutfbleau.projetAgile.Puissance4.Utils.Constants; import fr.iutfbleau.projetAgile.Puissance4.View.ColorChooserDialog; +import fr.iutfbleau.projetAgile.Puissance4.Utils.Constants; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; @@ -20,22 +20,28 @@ public class ColorActionListener implements ActionListener{ } /** - * Exécuté lors de l'appuie sur le bouton confirmé. Vérifie si les entrées de l'utilisateur sont valides, puis valide sont choix + * Exécuté lors de l'appuie sur le bouton confirmé. Vérifie si les entrées de l'utilisateur sont valides, puis valide son choix * @see fr.iutfbleau.projetAgile.Puissance4.View.ColorChooserDialog#isNameValid() * @see fr.iutfbleau.projetAgile.Puissance4.View.ColorChooserDialog#isColorValid() * @see fr.iutfbleau.projetAgile.Puissance4.View.ColorChooserDialog#setConfirm(boolean b) */ @Override public void actionPerformed(ActionEvent e) { - if(this.dialog.isColorValid()) { - if(this.dialog.isNameValid()) { - this.dialog.setConfirm(true); - this.dialog.setVisible(false); + if(e.getActionCommand().equals(Constants.CONFIRM)) { + if(this.dialog.isColorValid()) { + if(this.dialog.isNameValid()) { + this.dialog.setConfirm(true); + this.dialog.setVisible(false); + } + } + else { + this.dialog.repaint(); } } else { - Constants.resetColor(); - this.dialog.repaint(); + this.dialog.setConfirm(false); + this.dialog.setVisible(false); } + } } diff --git a/projetAgile/src/fr/iutfbleau/projetAgile/Puissance4/Controller/ColorChooserListener.java b/projetAgile/src/fr/iutfbleau/projetAgile/Puissance4/Controller/ColorChooserListener.java index 4f308c1..0679146 100644 --- a/projetAgile/src/fr/iutfbleau/projetAgile/Puissance4/Controller/ColorChooserListener.java +++ b/projetAgile/src/fr/iutfbleau/projetAgile/Puissance4/Controller/ColorChooserListener.java @@ -16,15 +16,20 @@ public class ColorChooserListener implements ChangeListener { private int player; /** - * - * @param c - * @param player + * Constructeur + * @param c le composant à repaint + * @param player le joueur dont la couleur doit être changé */ public ColorChooserListener(JComponent c, int player) { this.composant = c; this.player = player; } - + + /** + * Couleur du pion du joueur change en fonction de la couleur sélectionnée + * @param e + * @see #ColorChooserListener(JComponent, int) + */ @Override public void stateChanged(ChangeEvent e) { if(e.getSource() instanceof ColorSelectionModel) { diff --git a/projetAgile/src/fr/iutfbleau/projetAgile/Puissance4/Controller/ModelEventListener.java b/projetAgile/src/fr/iutfbleau/projetAgile/Puissance4/Controller/ModelEventListener.java index 8d4169e..8f15391 100644 --- a/projetAgile/src/fr/iutfbleau/projetAgile/Puissance4/Controller/ModelEventListener.java +++ b/projetAgile/src/fr/iutfbleau/projetAgile/Puissance4/Controller/ModelEventListener.java @@ -9,20 +9,24 @@ public class ModelEventListener implements GridChangedListener { /** * Constructeur - * @param p + * @param p le panneau du puissance 4 + * @see fr.iutfbleau.projetAgile.Puissance4.View.Puissance4Panel */ public ModelEventListener(Puissance4Panel p) { this.panel = p; } /** - * Ajoute un pion à l'emplacement modifié dans la grille + * Modifie la vue du pion à l'emplacement modifié dans la grille */ @Override public void gridChanged(GridEvent e) { this.panel.addPlayerPiece(e.getColumn(), e.getRow(), e.getPlayer()); } + /** + * Modifie la vue lorsque le status de la partie change + */ @Override public void statusChanged(StatusEvent e) { this.panel.changeLabel(e.getPlayerTurn()); @@ -30,6 +34,9 @@ public class ModelEventListener implements GridChangedListener { this.panel.setGameStatus(e.getStatus(), e.getPlayerTurn(), e.getPlayerOneScore(), e.getPlayerTwoScore(), e.getPlayerThreeScore()); } + /** + * Modifie la vue lorsque un joueur gagne (seulement si le nombre de joueur est supérieur à 2) + */ @Override public void playerWin(PlayerEvent e){ this.panel.playerWin(e.getJ()); diff --git a/projetAgile/src/fr/iutfbleau/projetAgile/Puissance4/Controller/Puissance4Controller.java b/projetAgile/src/fr/iutfbleau/projetAgile/Puissance4/Controller/Puissance4Controller.java index 8b71a3c..73f48a5 100644 --- a/projetAgile/src/fr/iutfbleau/projetAgile/Puissance4/Controller/Puissance4Controller.java +++ b/projetAgile/src/fr/iutfbleau/projetAgile/Puissance4/Controller/Puissance4Controller.java @@ -135,6 +135,7 @@ public class Puissance4Controller { * Change le nom des joueurs dans le modèle et la vue * @param J1 le nom du joueur 1 * @param J2 le nom du joueur 2 + * @param J3 le nom du joueur 3 */ public void changeName(String J1, String J2, String J3) { this.modele.setPlayerOneName(J1); diff --git a/projetAgile/src/fr/iutfbleau/projetAgile/Puissance4/Controller/ResetGame.java b/projetAgile/src/fr/iutfbleau/projetAgile/Puissance4/Controller/ResetGame.java index 8b39cee..43dcd17 100644 --- a/projetAgile/src/fr/iutfbleau/projetAgile/Puissance4/Controller/ResetGame.java +++ b/projetAgile/src/fr/iutfbleau/projetAgile/Puissance4/Controller/ResetGame.java @@ -9,10 +9,21 @@ public class ResetGame implements ActionListener { */ private Puissance4Controller controller; + + /** + * Création du listener du bouton reset + * @param p + */ public ResetGame(Puissance4Controller p){ this.controller = p; } + + /** + * Appelle la fonction ResetGame + * @param e + * @see #ResetGame(Puissance4Controller) + */ @Override public void actionPerformed(ActionEvent e) { this.controller.reset(); diff --git a/projetAgile/src/fr/iutfbleau/projetAgile/Puissance4/Event/AbstractGridInitiater.java b/projetAgile/src/fr/iutfbleau/projetAgile/Puissance4/Event/AbstractGridInitiater.java index 16ec791..a131a1e 100644 --- a/projetAgile/src/fr/iutfbleau/projetAgile/Puissance4/Event/AbstractGridInitiater.java +++ b/projetAgile/src/fr/iutfbleau/projetAgile/Puissance4/Event/AbstractGridInitiater.java @@ -55,6 +55,7 @@ public abstract class AbstractGridInitiater { * @param playerTurn Le tour du joueur * @param playerOneScore Le score du joueur 1 * @param playerTwoScore Le score du joueur 2 + * @param playerThreeScore Le score du joueur 3 */ protected void fireStatusChanged(GameStatus status, int playerTurn, int playerOneScore, int playerTwoScore, int playerThreeScore) { StatusEvent event = null; @@ -65,6 +66,10 @@ public abstract class AbstractGridInitiater { } } + /** + * Notifie tous les listeners lorsqu'un joueur gagne (supérieur à 2 joueurs) + * @param playerRemove le joueur qui a gagné + */ protected void firePlayerWin(int playerRemove){ PlayerEvent event=null; for(GridChangedListener listener : getGridListeners()) { @@ -72,6 +77,5 @@ public abstract class AbstractGridInitiater { event= new PlayerEvent(playerRemove); listener.playerWin(event); } - } } diff --git a/projetAgile/src/fr/iutfbleau/projetAgile/Puissance4/Event/PlayerEvent.java b/projetAgile/src/fr/iutfbleau/projetAgile/Puissance4/Event/PlayerEvent.java index cbf2e1e..d7ff3a5 100644 --- a/projetAgile/src/fr/iutfbleau/projetAgile/Puissance4/Event/PlayerEvent.java +++ b/projetAgile/src/fr/iutfbleau/projetAgile/Puissance4/Event/PlayerEvent.java @@ -6,9 +6,20 @@ package fr.iutfbleau.projetAgile.Puissance4.Event; public class PlayerEvent { private int J; + + /** + * Créer un évènement + * @param j0 + */ public PlayerEvent(int j0){ this.J=j0; } + + + /** + * Retourne le joueur + * @return le joueur + */ public int getJ() { return J; } diff --git a/projetAgile/src/fr/iutfbleau/projetAgile/Puissance4/LancementPuissance4.java b/projetAgile/src/fr/iutfbleau/projetAgile/Puissance4/LancementPuissance4.java index 301f916..67f9bfc 100644 --- a/projetAgile/src/fr/iutfbleau/projetAgile/Puissance4/LancementPuissance4.java +++ b/projetAgile/src/fr/iutfbleau/projetAgile/Puissance4/LancementPuissance4.java @@ -5,10 +5,11 @@ import fr.iutfbleau.projetAgile.Puissance4.Controller.Puissance4Controller; import fr.iutfbleau.projetAgile.Puissance4.View.Grille; import fr.iutfbleau.projetAgile.Puissance4.View.ColorChooserDialog; import fr.iutfbleau.projetAgile.Puissance4.Model.GrilleModel; +import fr.iutfbleau.projetAgile.Puissance4.Utils.Constants; + import java.awt.event.ActionListener; import java.sql.Connection; import java.sql.DriverManager; -import org.mariadb.jdbc.*; import java.sql.Statement; import java.util.concurrent.CancellationException; @@ -30,6 +31,7 @@ public class LancementPuissance4 implements Jeu{ * @throws CancellationException Renvoie une exception si les utilisateurs annule le lancement de la partie */ public LancementPuissance4(JFrame fenetre) throws CancellationException{ + String J1 = null; String J2 = null; String J3 = null; @@ -43,7 +45,7 @@ public class LancementPuissance4 implements Jeu{ Object[] message = { "Combien de joueurs ?", twoPlayer, threePlayer }; - int choix = JOptionPane.showConfirmDialog(fenetre, message, "Entrez le nombre de joueur", JOptionPane.OK_CANCEL_OPTION, JOptionPane.PLAIN_MESSAGE); + int choix = JOptionPane.showConfirmDialog(fenetre, message, "Entrez le nombre de joueurs", JOptionPane.OK_CANCEL_OPTION, JOptionPane.PLAIN_MESSAGE); if(choix != JOptionPane.OK_OPTION) { throw new CancellationException("User cancelled"); } @@ -53,6 +55,7 @@ public class LancementPuissance4 implements Jeu{ else playerNumber = 3; + Constants.resetColor(); ColorChooserDialog chooser = new ColorChooserDialog(fenetre, true, playerNumber); if (chooser.getChoice()) { J1 = chooser.getPlayerOneName(); @@ -92,7 +95,11 @@ public class LancementPuissance4 implements Jeu{ return this.P4.getPanel(); } - public void sendToDatabase(int playerNumber) { + /** + * Met à joueur le nombre de joueur choisi dans la base de données + * @param playerNumber le nombre de joueur choisi + */ + private void sendToDatabase(int playerNumber) { try { Class.forName("org.mariadb.jdbc.Driver"); //Verification du pilote diff --git a/projetAgile/src/fr/iutfbleau/projetAgile/Puissance4/Model/GrilleModel.java b/projetAgile/src/fr/iutfbleau/projetAgile/Puissance4/Model/GrilleModel.java index f671cba..c730f71 100644 --- a/projetAgile/src/fr/iutfbleau/projetAgile/Puissance4/Model/GrilleModel.java +++ b/projetAgile/src/fr/iutfbleau/projetAgile/Puissance4/Model/GrilleModel.java @@ -23,8 +23,10 @@ public class GrilleModel extends AbstractGridInitiater{ private int playerThreeScore; private LinkedList playersList; private int playerNumber; + /** * Crée le modèle et l'initialise avec des cases vides + * @param playerNumber le nombre de joueurs */ public GrilleModel(int playerNumber) { super(); @@ -58,6 +60,9 @@ public class GrilleModel extends AbstractGridInitiater{ this.setPartyStatus(GameStatus.PLAYING); } + /** + * Remet la liste des joueurs dans l'ordre d'origine + */ private void resetList() { this.playersList.clear(); this.playersList.add(Constants.PLAYER_ONE); @@ -67,6 +72,11 @@ public class GrilleModel extends AbstractGridInitiater{ } } + /** + * Ajoute un pion dans la grille + * @param column colonne de la grille + * @param row ligne de la grille + */ private void addPiece(int column, int row) { grille[column][row] = this.playerTurn; fireGridChanged(column, row, this.playerTurn); @@ -96,6 +106,9 @@ public class GrilleModel extends AbstractGridInitiater{ } } + /** + * Supprime de la liste le joueur qui vient de gagner + */ private void removePlayer(){ this.increaseScore(); this.removePlayerPion(); @@ -105,6 +118,9 @@ public class GrilleModel extends AbstractGridInitiater{ this.verifyNewWin(); } + /** + * Vérifie si tous les joueurs ont gagnés lors du passage de 3 à 2 joueurs + */ private void verifyNewWin() { boolean verifyFirstWin = this.verifyWinAll(this.playerTurn); this.switchPlayer(); @@ -119,6 +135,10 @@ public class GrilleModel extends AbstractGridInitiater{ } } + /** + * Vérifie la grille en fonction de la couleur du pion + * @param playerColor joueur associé à une couleur + */ public boolean verifyWinAll(int playerColor) { for(int y = 0; y < this.column; y++) { for(int x = this.row - 1; x >= 0; x--) { @@ -172,13 +192,13 @@ public class GrilleModel extends AbstractGridInitiater{ /** - * ReplayersListne true si 4 jetons de la même couleur ou plus sont alignés + * renvoie true si 4 jetons de la même couleur ou plus sont alignés * @param numColumn La colonne où commencer * @param numRow La ligne où commencer * @param columnOffset l'offset de déplacement vertical * @param rowOffset l'offset de déplacement horizontal * @param playerColor La couleur du joueur (entier) - * @return ReplayersListne true si 4 jetons ou plus sont alignés + * @return renvoie true si 4 jetons ou plus sont alignés */ private boolean verifyAlignedPiece(int numColumn, int numRow, int columnOffset, int rowOffset, int playerColor) { int couleur = playerColor; @@ -202,6 +222,9 @@ public class GrilleModel extends AbstractGridInitiater{ return false; } + /** + * Vérifie s'il y a une égalité + */ private void verifyDraw() { if(this.piecePlayed >= this.column * this.row) this.setPartyStatus(GameStatus.DRAW); @@ -228,7 +251,9 @@ public class GrilleModel extends AbstractGridInitiater{ fireStatusChanged(this.gameStatus, this.playerTurn, this.playerOneScore, this.playerTwoScore, this.playerThreeScore); } - + /** + * Augmente le score du joueur victorieux + */ private void increaseScore() { if(this.playerTurn == Constants.PLAYER_ONE) playerOneScore++; @@ -252,6 +277,11 @@ public class GrilleModel extends AbstractGridInitiater{ } } + /** + * Fait tomber les pions de la colonne à partir de la ligne sélectionnée + * @param col colonne de la grille + * @param ligne ligne de la grille + */ private void dropColumn(int col, int ligne){ for(int i=ligne; i>=0; i--){ if(i>0){ @@ -266,7 +296,7 @@ public class GrilleModel extends AbstractGridInitiater{ // ----------------------- Getter et Setter -------------------------- /** - * ReplayersListne le playersList du joueur + * renvoie le playersList du joueur * @return Le playersList du joueur */ public int getPlayerTurn() { @@ -274,7 +304,7 @@ public class GrilleModel extends AbstractGridInitiater{ } /** - * ReplayersListne le tableau d'entier qui représente l'état de la grille + * renvoie le tableau d'entier qui représente l'état de la grille * @return Le tableau d'entier */ public int[][] getTab() { @@ -282,7 +312,7 @@ public class GrilleModel extends AbstractGridInitiater{ } /** - * ReplayersListne le nombre de colonne de la grille + * renvoie le nombre de colonne de la grille * @return Le nombre de colonne */ public int getColumn() { @@ -290,7 +320,7 @@ public class GrilleModel extends AbstractGridInitiater{ } /** - * ReplayersListne le nombre de ligne de la grille + * renvoie le nombre de ligne de la grille * @return Le nombre de ligne */ public int getRow() { @@ -298,7 +328,7 @@ public class GrilleModel extends AbstractGridInitiater{ } /** - * ReplayersListne le nom du joueur 1 + * renvoie le nom du joueur 1 * @return Un string du nom du joueur 1 */ public String getPlayerOneName() { @@ -306,7 +336,7 @@ public class GrilleModel extends AbstractGridInitiater{ } /** - * ReplayersListne le nom du joueur 2 + * renvoie le nom du joueur 2 * @return Un string du nom du joueur 2 */ public String getPlayerTwoName() { @@ -314,7 +344,7 @@ public class GrilleModel extends AbstractGridInitiater{ } /** - * ReplayersListne le nom du joueur 3 + * renvoie le nom du joueur 3 * @return Un string du nom du joueur 2 */ public String getPlayerThreeName() { @@ -323,7 +353,7 @@ public class GrilleModel extends AbstractGridInitiater{ /** - * ReplayersListne le score du joueur 1 + * renvoie le score du joueur 1 * @return Le score du joueur 1 */ public int getPlayerOneScore() { @@ -331,7 +361,7 @@ public class GrilleModel extends AbstractGridInitiater{ } /** - * ReplayersListne le score du joueur 2 + * renvoie le score du joueur 2 * @return Le score du joueur 2 */ public int getPlayerTwoScore() { @@ -339,7 +369,7 @@ public class GrilleModel extends AbstractGridInitiater{ } /** - * ReplayersListne le score du joueur 3 + * renvoie le score du joueur 3 * @return Le score du joueur 3 */ public int getPlayerThreeScore() { @@ -347,7 +377,7 @@ public class GrilleModel extends AbstractGridInitiater{ } /** - * ReplayersListne le {@link fr.iutfbleau.projetAgile.Puissance4.Utils.GameStatus status} de la partie + * renvoie le {@link fr.iutfbleau.projetAgile.Puissance4.Utils.GameStatus status} de la partie * @return Le status de la partie */ public GameStatus getGameStatus() { diff --git a/projetAgile/src/fr/iutfbleau/projetAgile/Puissance4/Utils/Constants.java b/projetAgile/src/fr/iutfbleau/projetAgile/Puissance4/Utils/Constants.java index 496dc69..9caaed9 100644 --- a/projetAgile/src/fr/iutfbleau/projetAgile/Puissance4/Utils/Constants.java +++ b/projetAgile/src/fr/iutfbleau/projetAgile/Puissance4/Utils/Constants.java @@ -9,15 +9,15 @@ public class Constants { /** * La couleur du joueur 1 */ - public static Color PLAYER_ONE_COLOR = new Color(252,21,21); + public static Color PLAYER_ONE_COLOR; /** * La couleur du joueur 2 */ - public static Color PLAYER_TWO_COLOR = new Color(241,205,15); + public static Color PLAYER_TWO_COLOR; /** * La couleur du joueur 3 */ - public static Color PLAYER_THREE_COLOR = new Color(15,20,241); + public static Color PLAYER_THREE_COLOR; /** * La couleur d'un pion "vide" */ @@ -26,6 +26,11 @@ public class Constants { * La couleur de fond du panneau */ public final static Color BACKGROUND_COLOR = new Color(31,31,31); + /** + * La couleur des boutons + */ + public final static Color RED = new Color(255,64,64); + /** * L'entier qui représente un pion "vide" */ @@ -67,11 +72,19 @@ public class Constants { */ public final static int ALIGNED_NUMBER_THREE = 3; + public final static String CONFIRM = "Confirmation"; + + public final static String DENY = "Annulation"; + + private Constants() { } + /** + * Remet les couleurs des pions des joueurs par défaut + */ public static void resetColor() { Constants.PLAYER_ONE_COLOR = new Color(252,21,21); Constants.PLAYER_TWO_COLOR = new Color(241,205,15); diff --git a/projetAgile/src/fr/iutfbleau/projetAgile/Puissance4/Utils/GameStatus.java b/projetAgile/src/fr/iutfbleau/projetAgile/Puissance4/Utils/GameStatus.java index 1903cd4..b74bace 100644 --- a/projetAgile/src/fr/iutfbleau/projetAgile/Puissance4/Utils/GameStatus.java +++ b/projetAgile/src/fr/iutfbleau/projetAgile/Puissance4/Utils/GameStatus.java @@ -4,6 +4,9 @@ package fr.iutfbleau.projetAgile.Puissance4.Utils; * Enumeration du status d'une partie (En cours, gagné, égalité) */ public enum GameStatus { + /** + * Status d'une partie en cours + */ PLAYING, /** * Status d'une partie terminé et gagné par un joueur diff --git a/projetAgile/src/fr/iutfbleau/projetAgile/Puissance4/View/ColorChooserDialog.java b/projetAgile/src/fr/iutfbleau/projetAgile/Puissance4/View/ColorChooserDialog.java index fa24e0a..eed95dd 100644 --- a/projetAgile/src/fr/iutfbleau/projetAgile/Puissance4/View/ColorChooserDialog.java +++ b/projetAgile/src/fr/iutfbleau/projetAgile/Puissance4/View/ColorChooserDialog.java @@ -8,12 +8,14 @@ import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JTextField; import javax.swing.UIManager; +import javax.swing.border.EmptyBorder; import javax.swing.colorchooser.AbstractColorChooserPanel; import java.awt.GridBagConstraints; import java.awt.GridBagLayout; import java.awt.Dimension; import java.awt.Insets; import java.awt.Frame; +import java.awt.Color; import fr.iutfbleau.projetAgile.Puissance4.Controller.ColorActionListener; @@ -28,16 +30,19 @@ public class ColorChooserDialog extends JDialog{ private JTextField field1; private JTextField field2; private JTextField field3; + private int playerNumber; private boolean confirm = false; /** * Crée une fenêtre modale avec pour nom "Choisissez vos noms et couleurs" * @param owner la {@code Frame} depuis laquelle la fenetre modale est affichée * @param modal specifie si la fenêtre modale bloque les interactions avec les fenêtres mères + * @param playerNumber Nombre de joueurs * @see javax.swing.JDialog#JDialog(Frame, boolean) */ public ColorChooserDialog(Frame owner, boolean modal, int playerNumber) { super(owner, "Choisissez vos noms et couleurs",modal); + this.playerNumber = playerNumber; this.setLayout(new GridBagLayout()); GridBagConstraints gbc = new GridBagConstraints(); @@ -59,11 +64,25 @@ public class ColorChooserDialog extends JDialog{ playerThreeChooser.removeChooserPanel(panelsP3[i]); } - JButton bouton = new JButton("Confirmer"); + JButton confirmButton = new JButton("Confirmer"); + confirmButton.setFocusPainted(false); + confirmButton.setActionCommand(Constants.CONFIRM); + JButton denyButton = new JButton("Annuler"); + denyButton.setFocusPainted(false); + denyButton.setActionCommand(Constants.DENY); + + JPanel panelButton = new JPanel(); + panelButton.setOpaque(false); + panelButton.add(confirmButton); + panelButton.add(denyButton); + Pion pionP1 = new Pion(Constants.PLAYER_ONE); Pion pionP2 = new Pion(Constants.PLAYER_TWO); Pion pionP3 = new Pion(Constants.PLAYER_THREE); - bouton.addActionListener(new ColorActionListener(this)); + ColorActionListener cl = new ColorActionListener(this); + confirmButton.addActionListener(cl); + denyButton.addActionListener(cl); + pionP1.setPreferredSize(new Dimension(50,50)); pionP2.setPreferredSize(new Dimension(50,50)); pionP3.setPreferredSize(new Dimension(50,50)); @@ -172,7 +191,7 @@ public class ColorChooserDialog extends JDialog{ gbc.weighty = 0; gbc.fill = GridBagConstraints.NONE; gbc.anchor = GridBagConstraints.EAST; - this.add(bouton,gbc); + this.add(panelButton,gbc); this.pack(); this.setResizable(false); @@ -182,7 +201,7 @@ public class ColorChooserDialog extends JDialog{ /** * Vérifie si les couleurs choisies ne sont vont pas être confondues - * @return true si les couleurs choisies ne sont pas trop similaires les unes des unes, false sinon + * @return true si les couleurs choisies ne sont pas trop similaires renvoie true, sinon false * @see Wikipedia */ public boolean isColorValid() { @@ -196,11 +215,11 @@ public class ColorChooserDialog extends JDialog{ JOptionPane.showMessageDialog(this,"Les deux couleurs sont trop proches (1,2)","Erreur ", JOptionPane.ERROR_MESSAGE); return false; } - if(distanceBetweenP1AndP3 < 150f) { + if(playerNumber == 3 && distanceBetweenP1AndP3 < 150f) { JOptionPane.showMessageDialog(this,"Les deux couleurs sont trop proches (1,3)","Erreur ", JOptionPane.ERROR_MESSAGE); return false; } - if(distanceBetweenP2AndP3 < 150f) { + if(playerNumber == 3 && distanceBetweenP2AndP3 < 150f) { JOptionPane.showMessageDialog(this,"Les deux couleurs sont trop proches (2,3)","Erreur ", JOptionPane.ERROR_MESSAGE); return false; } @@ -212,7 +231,7 @@ public class ColorChooserDialog extends JDialog{ JOptionPane.showMessageDialog(this,"La couleur du joueur 2 est trop sombre","Erreur ", JOptionPane.ERROR_MESSAGE); return false; } - else if(distanceBetweenP3AndEmpty < 150f) { + else if(playerNumber == 3 && distanceBetweenP3AndEmpty < 150f) { JOptionPane.showMessageDialog(this,"La couleur du joueur 3 est trop sombre","Erreur ", JOptionPane.ERROR_MESSAGE); return false; } @@ -288,7 +307,8 @@ public class ColorChooserDialog extends JDialog{ /** - * Permet de confirmer la choix de l'utilisateur + * Permet de confirmer le choix de l'utilisateur + * @param b le booléen */ public void setConfirm(boolean b) { this.confirm = b; diff --git a/projetAgile/src/fr/iutfbleau/projetAgile/Puissance4/View/Grille.java b/projetAgile/src/fr/iutfbleau/projetAgile/Puissance4/View/Grille.java index ff24721..9b753b9 100644 --- a/projetAgile/src/fr/iutfbleau/projetAgile/Puissance4/View/Grille.java +++ b/projetAgile/src/fr/iutfbleau/projetAgile/Puissance4/View/Grille.java @@ -138,7 +138,4 @@ public class Grille extends JPanel{ } } - public void removePlayerPion(int Joueur){ - - } } \ No newline at end of file diff --git a/projetAgile/src/fr/iutfbleau/projetAgile/Puissance4/View/Pion.java b/projetAgile/src/fr/iutfbleau/projetAgile/Puissance4/View/Pion.java index fd3d303..9862616 100644 --- a/projetAgile/src/fr/iutfbleau/projetAgile/Puissance4/View/Pion.java +++ b/projetAgile/src/fr/iutfbleau/projetAgile/Puissance4/View/Pion.java @@ -76,6 +76,9 @@ public class Pion extends JComponent{ Pion.HIGHLIGHT_COLOR = c; } + /** + * Paint le pion + */ @Override protected void paintComponent(Graphics g) { Graphics2D g2 = (Graphics2D) g.create(); diff --git a/projetAgile/src/fr/iutfbleau/projetAgile/Puissance4/View/Puissance4Panel.java b/projetAgile/src/fr/iutfbleau/projetAgile/Puissance4/View/Puissance4Panel.java index f72e4b0..de6fde0 100644 --- a/projetAgile/src/fr/iutfbleau/projetAgile/Puissance4/View/Puissance4Panel.java +++ b/projetAgile/src/fr/iutfbleau/projetAgile/Puissance4/View/Puissance4Panel.java @@ -39,6 +39,7 @@ public class Puissance4Panel extends JPanel{ /** * Ajoute tous les composants autres que la grille au panneau (Bouton recommencer, accueil, le nom du joueur qui joue, le score) * Il faut appeler cette fonction après avoir initialisé les différents variables du jeu (noms des joueurs) + * @param title Nom du JLabel */ public void init(String title) { GridBagLayout gbl = new GridBagLayout(); @@ -127,12 +128,12 @@ public class Puissance4Panel extends JPanel{ this.add(this.reset, gbc); - reset.setBackground(new Color(255,64,64)); + reset.setBackground(Constants.RED); reset.setForeground(Color.WHITE); reset.setFocusPainted(false); reset.setBorder(new EmptyBorder(5,10,5,10)); - menu.setBackground(new Color(255,64,64)); + menu.setBackground(Constants.RED); menu.setForeground(Color.WHITE); menu.setFocusPainted(false); menu.setBorder(new EmptyBorder(5,10,5,10)); @@ -202,6 +203,7 @@ public class Puissance4Panel extends JPanel{ * @param playerTurn le tour du joueur actuel * @param playerOneScore le score du joueur 1 * @param playerTwoScore le score du joueur 2 + * @param playerThreeScore le score du joueur 3 */ public void setGameStatus(GameStatus status, int playerTurn, int playerOneScore, int playerTwoScore, int playerThreeScore) { this.grille.hover(-1); @@ -231,6 +233,10 @@ public class Puissance4Panel extends JPanel{ this.changeScore(playerOneScore, playerTwoScore, playerThreeScore); } + /** + * Envoie un popup avec un message de victoire + * @param player joueur + */ public void playerWin(int player){ switch(player){ case 1: @@ -264,7 +270,7 @@ public class Puissance4Panel extends JPanel{ /** * Permet de définir le nom du joueur 3 - * @param playerTwoName le nom du joueur + * @param playerThreeName le nom du joueur */ public void setPlayerThreeName(String playerThreeName) { this.playerThreeName = playerThreeName;