diff --git a/projetAgile/src/fr/iutfbleau/projetAgile/Jeu.java b/projetAgile/src/fr/iutfbleau/projetAgile/Jeu.java index a674678..32414fb 100644 --- a/projetAgile/src/fr/iutfbleau/projetAgile/Jeu.java +++ b/projetAgile/src/fr/iutfbleau/projetAgile/Jeu.java @@ -4,6 +4,9 @@ import java.awt.event.ActionListener; import javax.swing.JPanel; +/** + * Interface qui doit être implémenté par les différents jeux + */ public interface Jeu { /** * Ajoute un ActionListener pour un bouton "accueil" pour revenir au menu diff --git a/projetAgile/src/fr/iutfbleau/projetAgile/Puissance4/Controller/ColorActionListener.java b/projetAgile/src/fr/iutfbleau/projetAgile/Puissance4/Controller/ColorActionListener.java index 03a8951..aada149 100644 --- a/projetAgile/src/fr/iutfbleau/projetAgile/Puissance4/Controller/ColorActionListener.java +++ b/projetAgile/src/fr/iutfbleau/projetAgile/Puissance4/Controller/ColorActionListener.java @@ -5,13 +5,25 @@ import fr.iutfbleau.projetAgile.Puissance4.View.ColorChooserDialog; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; +/** + * Classe qui implémente un ActionListener et qui "écoute" le bouton confirmé du ColorChooserDialog + */ public class ColorActionListener implements ActionListener{ private ColorChooserDialog dialog; - + /** + * Constructeur du Listener + * @param c le ColorChooserDialog qu'il écoute + */ public ColorActionListener(ColorChooserDialog c) { this.dialog = c; } + /** + * 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 + * @see fr.iutfbleau.projetAgile.Puissance4.View.ColorChooserDialog#isNameValid() + * @see fr.iutfbleau.projetAgile.Puissance4.View.ColorChooserDialog#isColorValid() + * @see fr.iutfbleau.projetAgile.Puissance4.View.ColorChooserDialog#setConfirm() + */ @Override public void actionPerformed(ActionEvent e) { if(this.dialog.isColorValid() && this.dialog.isNameValid()) { diff --git a/projetAgile/src/fr/iutfbleau/projetAgile/Puissance4/Controller/ColorChooserListener.java b/projetAgile/src/fr/iutfbleau/projetAgile/Puissance4/Controller/ColorChooserListener.java index 1f34738..9fd41cb 100644 --- a/projetAgile/src/fr/iutfbleau/projetAgile/Puissance4/Controller/ColorChooserListener.java +++ b/projetAgile/src/fr/iutfbleau/projetAgile/Puissance4/Controller/ColorChooserListener.java @@ -7,6 +7,9 @@ import javax.swing.event.ChangeListener; import fr.iutfbleau.projetAgile.Puissance4.Utils.Constants; +/** + * Classe inutile, peut être remplacée par l'appuie sur le bouton confirmé (A chanegr Jeudi) + */ public class ColorChooserListener implements ChangeListener { private JComponent composant; diff --git a/projetAgile/src/fr/iutfbleau/projetAgile/Puissance4/Controller/GrilleMouseListener.java b/projetAgile/src/fr/iutfbleau/projetAgile/Puissance4/Controller/GrilleMouseListener.java index 86d6362..8f6d99f 100644 --- a/projetAgile/src/fr/iutfbleau/projetAgile/Puissance4/Controller/GrilleMouseListener.java +++ b/projetAgile/src/fr/iutfbleau/projetAgile/Puissance4/Controller/GrilleMouseListener.java @@ -4,20 +4,34 @@ import java.awt.event.MouseEvent; import javax.swing.event.MouseInputAdapter; import fr.iutfbleau.projetAgile.Puissance4.Utils.Constants; +/** + * Classe qui hérite de MouseInputAdapter qui écoute la souris sur le panneau du jeu + */ public class GrilleMouseListener extends MouseInputAdapter{ private Puissance4Controller controller; - + /** + * Constructeur de la classe + * @param p le controleur du jeu + */ public GrilleMouseListener(Puissance4Controller p) { this.controller = p; } + /** + * Si la souris bouge et que l'option de survol est activé, affiche le survol + * @see fr.iutfbleau.projetAgile.Puissance4.Controller.Puissance4Controller#hoverGrille(int) + */ @Override public void mouseMoved(MouseEvent e) { if(Constants.DRAW_POSITION) this.controller.hoverGrille(e.getX()); } + /** + * Si la bouton gauche de la souris est cliqué vérifie si on peut placer un pion dans la grille + * @see fr.iutfbleau.projetAgile.Puissance4.Controller.Puissance4Controller#verifyColumn(int) + */ @Override public void mousePressed(MouseEvent e) { if(e.getButton() == MouseEvent.BUTTON1) { @@ -26,6 +40,10 @@ public class GrilleMouseListener extends MouseInputAdapter{ } } + /** + * Si la souris sort du "cadre" de la grille, efface le survol + * @see fr.iutfbleau.projetAgile.Puissance4.Controller.Puissance4Controller#hoverGrille(int) + */ @Override public void mouseExited(MouseEvent e) { this.controller.hoverGrille(-1); diff --git a/projetAgile/src/fr/iutfbleau/projetAgile/Puissance4/Controller/Puissance4Controller.java b/projetAgile/src/fr/iutfbleau/projetAgile/Puissance4/Controller/Puissance4Controller.java index affe7e7..a6d7662 100644 --- a/projetAgile/src/fr/iutfbleau/projetAgile/Puissance4/Controller/Puissance4Controller.java +++ b/projetAgile/src/fr/iutfbleau/projetAgile/Puissance4/Controller/Puissance4Controller.java @@ -38,6 +38,10 @@ public class Puissance4Controller { this.modele.addGridListener(modelListener); } + /** + * Initialise la vue, doit être appelé après avoir configuré le modèle (nom des joueurs) + * @see fr.iutfbleau.projetAgile.Puissance4.Controller.Puissance4Controller#changeName(String, String) + */ public void initPanel() { this.panel.init(); this.panel.changeHoverColor(this.modele.getPlayerTurn()); @@ -45,6 +49,12 @@ public class Puissance4Controller { this.panel.changeScore(this.modele.getPlayerOneScore(), this.modele.getPlayerTwoScore()); } + /** + * Réinitialise la partie : + * - le status de la partie (en PLAYING) + * - la grille du modèle + * - la vue + */ public void reset() { if(this.modele.getGameStatus() == GameStatus.PLAYING) { int confirmation = JOptionPane.showConfirmDialog(this.panel, "Une partie est en cours ! Etes-vous sûr de vouloir recommencer ?", "Recommencer", JOptionPane.YES_NO_OPTION); @@ -68,6 +78,11 @@ public class Puissance4Controller { } } + /** + * Affiche le survol de la grille + * @param x la position x de la souris sur la grille + * Si x est égal à -1 efface le survol + */ public void hoverGrille(int x) { if(this.modele.getGameStatus() == GameStatus.PLAYING) { if(x == -1) { @@ -79,6 +94,10 @@ public class Puissance4Controller { } } + /** + * Permet de récupérer le panneau du jeu + * @return le panneau du jeu + */ public JPanel getPanel() { return this.panel; } @@ -92,6 +111,11 @@ public class Puissance4Controller { this.panel.accueilButton(l); } + /** + * 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 + */ public void changeName(String J1, String J2) { this.modele.setPlayerOneName(J1); this.modele.setPlayerTwoName(J2); diff --git a/projetAgile/src/fr/iutfbleau/projetAgile/Puissance4/View/ColorChooserDialog.java b/projetAgile/src/fr/iutfbleau/projetAgile/Puissance4/View/ColorChooserDialog.java index e406f52..d94d309 100644 --- a/projetAgile/src/fr/iutfbleau/projetAgile/Puissance4/View/ColorChooserDialog.java +++ b/projetAgile/src/fr/iutfbleau/projetAgile/Puissance4/View/ColorChooserDialog.java @@ -3,27 +3,40 @@ package fr.iutfbleau.projetAgile.Puissance4.View; import javax.swing.JButton; import javax.swing.JColorChooser; import javax.swing.JDialog; -import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JTextField; import javax.swing.UIManager; import javax.swing.colorchooser.AbstractColorChooserPanel; -import java.awt.*; +import java.awt.GridBagConstraints; +import java.awt.GridBagLayout; +import java.awt.Dimension; +import java.awt.Insets; +import java.awt.Frame; + import fr.iutfbleau.projetAgile.Puissance4.Controller.ColorActionListener; import fr.iutfbleau.projetAgile.Puissance4.Controller.ColorChooserListener; import fr.iutfbleau.projetAgile.Puissance4.Utils.Constants; +/** + * JDialog personnalisé permettant de choisir un nom et une couleur pour deux joueur + */ public class ColorChooserDialog extends JDialog{ private JTextField field1; private JTextField field2; private boolean confirm = false; - public ColorChooserDialog(JFrame fenetre, boolean b) { - super(fenetre, "Choisissez vos noms et couleurs",b); + /** + * 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 + * @see javax.swing.JDialog#JDialog(Frame, boolean) + */ + public ColorChooserDialog(Frame owner, boolean modal) { + super(owner, "Choisissez vos noms et couleurs",modal); this.setLayout(new GridBagLayout()); GridBagConstraints gbc = new GridBagConstraints(); @@ -123,11 +136,15 @@ public class ColorChooserDialog extends JDialog{ this.pack(); this.setResizable(false); - this.setLocationRelativeTo(fenetre); + this.setLocationRelativeTo(owner); this.setDefaultCloseOperation(DISPOSE_ON_CLOSE); } - //Voir https://en.wikipedia.org/wiki/Color_difference + /** + * 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 + * {@link https://en.wikipedia.org/wiki/Color_difference Wikipedia} + */ public boolean isColorValid() { double distanceBetweenP1AndP2 = Math.sqrt(Math.pow(Constants.PLAYER_TWO_COLOR.getRed() - Constants.PLAYER_ONE_COLOR.getRed(), 2) + Math.pow(Constants.PLAYER_TWO_COLOR.getGreen() - Constants.PLAYER_ONE_COLOR.getGreen(), 2) + Math.pow(Constants.PLAYER_TWO_COLOR.getBlue() - Constants.PLAYER_ONE_COLOR.getBlue(), 2)); double distanceBetweenP1AndEmpty = Math.sqrt(Math.pow(Constants.EMPTY_COLOR.getRed() - Constants.PLAYER_ONE_COLOR.getRed(), 2) + Math.pow(Constants.EMPTY_COLOR.getGreen() - Constants.PLAYER_ONE_COLOR.getGreen(), 2) + Math.pow(Constants.EMPTY_COLOR.getBlue() - Constants.PLAYER_ONE_COLOR.getBlue(), 2)); @@ -147,6 +164,10 @@ public class ColorChooserDialog extends JDialog{ return true; } + /** + * Vérifie si les noms sont valides, c'est à dire qu'ils ne sont pas vides, ni identiques + * @return true si les noms sont valides, false sinon. + */ public boolean isNameValid() { String J1 = null; String J2 = null; @@ -171,18 +192,36 @@ public class ColorChooserDialog extends JDialog{ return true; } + /** + * Permet de récupérer le nom inscrit pour le joueur 1 + * @return un {@code String} correspondant au nom du joueur 1 + */ public String getPlayerOneName() { return this.field1.getText(); } + + /** + * Permet de récupérer le nom inscrit pour le joueur 2 + * @return un {@code String} correspondant au nom du joueur 2 + */ public String getPlayerTwoName() { return this.field2.getText(); } + + /** + * Permet de confirmer la choix de l'utilisateur + * @return un {@code String} correspondant au nom du joueur 1 + */ public void setConfirm(boolean b) { this.confirm = b; } + /** + * Affiche le JDialog et renvoie le choix de l'utilisateur + * @return true si l'uilisateur a confirmé son choix, false sinon + */ public boolean getChoice() { this.setVisible(true); return this.confirm; diff --git a/projetAgile/src/fr/iutfbleau/projetAgile/Puissance4/View/Pion.java b/projetAgile/src/fr/iutfbleau/projetAgile/Puissance4/View/Pion.java index 3e70bca..cb82fbc 100644 --- a/projetAgile/src/fr/iutfbleau/projetAgile/Puissance4/View/Pion.java +++ b/projetAgile/src/fr/iutfbleau/projetAgile/Puissance4/View/Pion.java @@ -13,14 +13,26 @@ public class Pion extends JComponent{ private int player; private boolean hover = false; + /** + * Dimension minimum d'un pion + * @return la {@code Dimension} minimale d'un pion + */ public static Dimension getPionMinimumSize() { return new Dimension(80,80); } + /** + * Dimension maximale d'un pion + * @return la {@code Dimension} maximale d'un pion + */ public static Dimension getPionMaximumSize() { return new Dimension(150,150); } + /** + * Dimension préférée d'un pion + * @return la {@code Dimension} préférée d'un pion + */ public static Dimension getPionPreferredSize() { return new Dimension(120,120); }