Encore un peu de javadoc

This commit is contained in:
Justine Yannis 2022-11-07 21:35:34 +01:00
parent 848954ab25
commit 1afa4ab7d9
7 changed files with 119 additions and 8 deletions

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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