Finalisation de la documentation Java

This commit is contained in:
Moncef STITI 2024-05-02 18:36:37 +02:00
parent a430913fa5
commit 7deb20f794
25 changed files with 492 additions and 92 deletions

View File

@ -7,7 +7,6 @@ import java.awt.*;
* @author Moncef STITI * @author Moncef STITI
* @author Marco ORFAO * @author Marco ORFAO
*/ */
public class Button extends JButton { public class Button extends JButton {
/** /**
* Constructor * Constructor

View File

@ -1,4 +1,3 @@
/** /**
* Interface containing definition to showDialog box. * Interface containing definition to showDialog box.
* @version 1.0 * @version 1.0
@ -6,5 +5,8 @@
* @author Marco ORFAO * @author Marco ORFAO
*/ */
public interface DialogManager { public interface DialogManager {
/**
* Affiche une boîte de dialogue.
*/
void showDialog(); void showDialog();
} }

View File

@ -26,13 +26,27 @@ public class GMCase extends JPanel {
*/ */
protected boolean isActive = false; protected boolean isActive = false;
/**
* Ligne
*/
private int row; private int row;
/**
* Colonne
*/
private int col; private int col;
/**
* Grille
*/
private GMGrid grille; private GMGrid grille;
/** /**
* Constructeur par défaut de GMCase. * Constructeur de GMCase.
* Initialise le bouton avec les propriétés nécessaires, crée un GMCaseListener et l'ajoute au bouton. * Initialise le bouton avec les propriétés nécessaires, crée un GMCaseListener et l'ajoute au bouton.
* @param grille La grille à laquelle la case appartient.
* @param row L'indice de ligne de la case.
* @param col L'indice de colonne de la case.
*/ */
public GMCase(GMGrid grille, int row, int col) { public GMCase(GMGrid grille, int row, int col) {
this.grille = grille; this.grille = grille;
@ -87,6 +101,10 @@ public class GMCase extends JPanel {
return this.cellValue; return this.cellValue;
} }
/**
* Définit l'état d'activité de la case et met à jour son apparence en conséquence.
* @param active true si la case doit être activée, false sinon.
*/
public void setActive(boolean active) { public void setActive(boolean active) {
this.isActive = active; this.isActive = active;
if (isActive) { if (isActive) {

View File

@ -9,17 +9,37 @@ import javax.swing.JOptionPane;
* @author Marco ORFAO * @author Marco ORFAO
*/ */
public class GMCaseKeyListener implements KeyListener { public class GMCaseKeyListener implements KeyListener {
/**
* Le vérificateur de grille pour vérifier si les règles du Sudoku sont respectées.
*/
private GMChecker checker; private GMChecker checker;
/**
* La case GMCase à écouter.
*/
private GMCase gridMakerCase; private GMCase gridMakerCase;
private GMCase gridMakerCaseCopy;
/**
* La grille GMGrid à laquelle la case appartient.
*/
private GMGrid grille; private GMGrid grille;
/**
* L'indice de ligne de la case dans la grille.
*/
private int row; private int row;
/**
* L'indice de colonne de la case dans la grille.
*/
private int col; private int col;
/** /**
* Constructeur de GridMakerCaseListener. * Constructeur de GridMakerCaseListener.
* @param gridMakerCase La case à écouter. * @param gridMakerCase La case à écouter.
* @param grille La grille à laquelle la case appartient.
* @param row L'indice de ligne de la case.
* @param col L'indice de colonne de la case.
*/ */
public GMCaseKeyListener(GMCase gridMakerCase,GMGrid grille, int row, int col) { public GMCaseKeyListener(GMCase gridMakerCase,GMGrid grille, int row, int col) {
this.gridMakerCase = gridMakerCase; this.gridMakerCase = gridMakerCase;

View File

@ -1,12 +1,26 @@
import java.awt.event.MouseAdapter; import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent; import java.awt.event.MouseEvent;
import java.awt.*;
import javax.swing.*; import javax.swing.*;
/**
* GMCaseMouseListener est un écouteur de souris pour les cases de la grille
* @version 1.O
* @author Moncef STITI
* @author Marco ORFAO
*/
public class GMCaseMouseListener extends MouseAdapter { public class GMCaseMouseListener extends MouseAdapter {
// Variable statique pour stocker la dernière case activée /**
* Variable statique pour stocker la dernière case activée
*/
private static GMCase lastActiveCase; private static GMCase lastActiveCase;
/**
* Constructeur par défaut de GMCaseMouseListener.
*/
public GMCaseMouseListener() {
// Ce constructeur est laissé vide intentionnellement
}
@Override @Override
public void mouseClicked(MouseEvent e) { public void mouseClicked(MouseEvent e) {
super.mouseClicked(e); super.mouseClicked(e);

View File

@ -5,39 +5,49 @@ import java.awt.Color;
import javax.swing.border.Border; import javax.swing.border.Border;
/** /**
* A custom JPanel class representing a Sudoku grid. * GMGrid hérite de JPanel et représente une grille de Sudoku.
* @version 1.0 * @version 1.0
* @author Moncef STITI * @author Moncef STITI
* @author Marco ORFAO * @author Marco ORFAO
*/ */
public class GMGrid extends JPanel { public class GMGrid extends JPanel {
private int[][] gridValues = new int[9][9]; // Stores the values of each cell in the grid /**
private GMCase[][] gridCases = new GMCase[9][9]; // Represents the individual cells in the grid * Stocke les valeurs de chaque cellule dans la grille.
private int[] exportedGrid = new int[9]; // Stores the grid values in an exportable format */
private int[][] gridValues = new int[9][9];
/** /**
* Constructs a new GMGrid object and initializes the grid. * Représente les cellules individuelles dans la grille.
*/
private GMCase[][] gridCases = new GMCase[9][9];
/**
* Stocke les valeurs de la grille dans un format exportable.
*/
private int[] exportedGrid = new int[9];
/**
* Construit un nouvel objet GMGrid et initialise la grille.
*/ */
public GMGrid() { public GMGrid() {
setupGrid(); setupGrid();
setBackground(new Color(54, 91, 109)); // On change la couleur de fond (les cotés de la grille) setBackground(new Color(54, 91, 109)); // Changer la couleur de fond (les côtés de la grille)
} }
/** /**
* Sets up the layout of the Sudoku grid. * Met en place la disposition de la grille Sudoku.
*/ */
private void setupGrid() { private void setupGrid() {
// Add padding around the panel // Ajouter du remplissage autour du panneau
setBorder(new EmptyBorder(15, 15, 15, 15)); // Adjust the values as needed for desired padding setBorder(new EmptyBorder(15, 15, 15, 15)); // Ajuster les valeurs selon le remplissage désiré
setLayout(new GridLayout(3, 3)); // Définir la disposition pour le panneau principal de la grille
setLayout(new GridLayout(3, 3)); // Set layout for the main grid panel // Créer 9 zones de 3x3
// Create 9 zones of 3x3
JPanel[][] zones = new JPanel[3][3]; JPanel[][] zones = new JPanel[3][3];
setLayout(new GridLayout(3, 3)); setLayout(new GridLayout(3, 3));
// Create individual zones and add them to the main grid panel // Créer des zones individuelles et les ajouter au panneau principal de la grille
for (int i = 0; i < 3; i++) { for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) { for (int j = 0; j < 3; j++) {
zones[i][j] = new JPanel(); zones[i][j] = new JPanel();
@ -46,14 +56,14 @@ public class GMGrid extends JPanel {
} }
} }
// Create and add cells to each zone // Créer et ajouter des cellules à chaque zone
for (int i = 0; i < 9; i++) { for (int i = 0; i < 9; i++) {
for (int j = 0; j < 9; j++) { for (int j = 0; j < 9; j++) {
int zoneRow = i / 3; int zoneRow = i / 3;
int zoneCol = j / 3; int zoneCol = j / 3;
gridCases[i][j] = new GMCase(this,i,j); gridCases[i][j] = new GMCase(this,i,j);
zones[zoneRow][zoneCol].add(gridCases[i][j]); zones[zoneRow][zoneCol].add(gridCases[i][j]);
gridCases[i][j].setBorder(determineBorder(i, j)); // Utilisation de la fonction pour finir les bordures gridCases[i][j].setBorder(determineBorder(i, j)); // Utiliser la fonction pour terminer les bordures
gridCases[i][j].setBackground(Color.WHITE); gridCases[i][j].setBackground(Color.WHITE);
} }
} }
@ -71,12 +81,12 @@ public class GMGrid extends JPanel {
int bottom = ((i + 1) % 3 == 0) ? 5 : 1; // Bordure inférieure plus épaisse pour chaque troisième ligne int bottom = ((i + 1) % 3 == 0) ? 5 : 1; // Bordure inférieure plus épaisse pour chaque troisième ligne
int left = (j == 0) ? 5 : 1; // Bordure gauche plus épaisse pour la première colonne int left = (j == 0) ? 5 : 1; // Bordure gauche plus épaisse pour la première colonne
int right = ((j + 1) % 3 == 0) ? 5 : 1; // Bordure droite plus épaisse pour chaque troisième colonne int right = ((j + 1) % 3 == 0) ? 5 : 1; // Bordure droite plus épaisse pour chaque troisième colonne
return BorderFactory.createMatteBorder(top, left, bottom, right, Color.BLACK); // Crée et retourne la bordure return BorderFactory.createMatteBorder(top, left, bottom, right, Color.BLACK); // Créer et retourner la bordure
} }
/** /**
* Imports values to populate the Sudoku grid. * Importe des valeurs pour peupler la grille Sudoku.
* @param values An array of integers representing the Sudoku grid values. * @param values Un tableau d'entiers représentant les valeurs de la grille Sudoku.
*/ */
public void importGrid(int[] values) { public void importGrid(int[] values) {
for (int i = 0; i < 9; i++) { for (int i = 0; i < 9; i++) {
@ -96,9 +106,8 @@ public class GMGrid extends JPanel {
} }
/** /**
* Exports the current Sudoku grid values. * Exporte les valeurs actuelles de la grille Sudoku.
* * @return Un tableau d'entiers représentant les valeurs actuelles de la grille Sudoku.
* @return An array of integers representing the current Sudoku grid values.
*/ */
public int[] exportGrid() { public int[] exportGrid() {
for (int i = 0; i < 9; i++) { for (int i = 0; i < 9; i++) {
@ -113,11 +122,10 @@ public class GMGrid extends JPanel {
} }
/** /**
* Retrieves the value of a cell in the Sudoku grid. * Récupère la valeur d'une cellule dans la grille Sudoku.
* * @param row L'indice de ligne de la cellule.
* @param row The row index of the cell. * @param column L'indice de colonne de la cellule.
* @param column The column index of the cell. * @return La valeur de la cellule aux indices de ligne et de colonne spécifiés.
* @return The value of the cell at the specified row and column indices.
*/ */
public int getCellValueAt(int row, int column) { public int getCellValueAt(int row, int column) {
return gridCases[row][column].getCellValue(); return gridCases[row][column].getCellValue();

View File

@ -8,6 +8,9 @@ import java.awt.event.*;
* @author Marco ORFAO * @author Marco ORFAO
*/ */
public class GMHowToCreateController implements ActionListener { public class GMHowToCreateController implements ActionListener {
/**
* Le gestionnaire de dialogue pour la création de grille.
*/
private GMHowToCreateDialogManager howToCreateGrid; private GMHowToCreateDialogManager howToCreateGrid;
/** /**

View File

@ -10,6 +10,13 @@ import javax.swing.JOptionPane;
*/ */
public class GMHowToCreateDialogManager implements DialogManager { public class GMHowToCreateDialogManager implements DialogManager {
/**
* Constructeur par défaut de GMHowToCreateDialogManager.
*/
public GMHowToCreateDialogManager() {
// Ce constructeur est laissé vide intentionnellement
}
/** /**
* Méthode pour afficher la boîte de dialogue avec les instructions de création de grille. * Méthode pour afficher la boîte de dialogue avec les instructions de création de grille.
*/ */

View File

@ -9,19 +9,48 @@ import java.awt.*;
* @author Marco ORFAO * @author Marco ORFAO
*/ */
public class GMHowToCreateView extends JPanel { public class GMHowToCreateView extends JPanel {
/**
* La taille de la fenêtre de la boîte de dialogue.
*/
private Dimension FRAME_SIZE = new Dimension(600, 500); private Dimension FRAME_SIZE = new Dimension(600, 500);
/**
* La couleur de fond de la boîte de dialogue.
*/
private Color BACKGROUND_COLOR = new Color(54, 91, 109); private Color BACKGROUND_COLOR = new Color(54, 91, 109);
/**
* Le titre affiché dans la boîte de dialogue.
*/
private String TITLE = "Comment créer une grille"; private String TITLE = "Comment créer une grille";
/**
* La couleur du titre affiché dans la boîte de dialogue.
*/
private Color TITLE_COLOR = new Color(255, 255, 255); private Color TITLE_COLOR = new Color(255, 255, 255);
/**
* La police du titre affiché dans la boîte de dialogue.
*/
private Font TITLE_FONT = new Font("Copperplate", Font.BOLD, 40); private Font TITLE_FONT = new Font("Copperplate", Font.BOLD, 40);
/**
* Le texte des instructions affiché dans la boîte de dialogue.
*/
private String TEXT = "1. Cliquez sur le menu 'Fichier'.\n" + private String TEXT = "1. Cliquez sur le menu 'Fichier'.\n" +
"2. Sélectionnez l'option 'Nouveau'.\n" + "2. Sélectionnez l'option 'Nouveau'.\n" +
"3. Entrez les valeurs pour chaque cellule de la grille. (Entrez 0 si vous souhaitez supprimer une valeur de la grille)\n" + "3. Entrez les valeurs pour chaque cellule de la grille. (Entrez 0 si vous souhaitez supprimer une valeur de la grille)\n" +
"4. Cliquez sur 'Sauvegarder' pour enregistrer votre grille.\n\n" + "4. Cliquez sur 'Sauvegarder' pour enregistrer votre grille.\n\n" +
"Vous pouvez également charger une grille existante en sélectionnant 'Charger' depuis le menu 'Fichier'."; "Vous pouvez également charger une grille existante en sélectionnant 'Charger' depuis le menu 'Fichier'.";
/**
* La couleur du texte des instructions affiché dans la boîte de dialogue.
*/
private Color TEXT_COLOR = new Color(255, 255, 255); private Color TEXT_COLOR = new Color(255, 255, 255);
/**
* La police du texte des instructions affiché dans la boîte de dialogue.
*/
private Font TEXT_FONT = new Font("Arial", Font.PLAIN, 20); private Font TEXT_FONT = new Font("Arial", Font.PLAIN, 20);
/** /**

View File

@ -12,10 +12,29 @@ import java.io.*;
*/ */
public class GMImport implements ActionListener { public class GMImport implements ActionListener {
/**
* La fenêtre précédente.
*/
private JFrame previousFrame; private JFrame previousFrame;
/**
* La grille Sudoku.
*/
private GMGrid grid; private GMGrid grid;
/**
* Indique si l'importation est accessible.
*/
private boolean accessible; private boolean accessible;
/**
* Le fichier à importer.
*/
private File file; private File file;
/**
* Les valeurs importées de la grille.
*/
private int[] importedValues = new int[9]; private int[] importedValues = new int[9];
/** /**

View File

@ -3,14 +3,12 @@ import java.awt.event.ActionListener;
/** /**
* La classe GMResetGrid sert à crée une nouvelle grille de 0. * La classe GMResetGrid sert à crée une nouvelle grille de 0.
*
* @version 1.0 * @version 1.0
* @author Moncef STITI * @author Moncef STITI
* @author Marco ORFAO * @author Marco ORFAO
*/ */
public class GMResetGrid implements ActionListener { public class GMResetGrid implements ActionListener {
/** /**
* La grille à réinitialiser. * La grille à réinitialiser.
*/ */
@ -42,7 +40,6 @@ public class GMResetGrid implements ActionListener {
for (int i = 0; i < 9 ; i++) { for (int i = 0; i < 9 ; i++) {
array[i] = 0; array[i] = 0;
} }
this.myGrid.importGrid(array); this.myGrid.importGrid(array);
} }
} }

View File

@ -8,7 +8,10 @@ import java.awt.event.*;
* @author Marco ORFAO * @author Marco ORFAO
*/ */
public class GMRules implements ActionListener { public class GMRules implements ActionListener {
private RulesDialogManager rulesDialog; // Gestionnaire de la boîte de dialogue des règles /**
* Gestionnaire de la boîte de dialogue des règles
*/
private RulesDialogManager rulesDialog;
/** /**
* Constructeur de GMRules. * Constructeur de GMRules.

View File

@ -2,7 +2,6 @@ import java.io.*;
import javax.swing.*; import javax.swing.*;
import javax.swing.filechooser.FileNameExtensionFilter; import javax.swing.filechooser.FileNameExtensionFilter;
/** /**
* Cette classe implémente un gestionnaire d'enregistrement de grille de jeu. * Cette classe implémente un gestionnaire d'enregistrement de grille de jeu.
* Elle permet à l'utilisateur de sauvegarder une grille de jeu dans un fichier spécifié. * Elle permet à l'utilisateur de sauvegarder une grille de jeu dans un fichier spécifié.
@ -13,9 +12,24 @@ import javax.swing.filechooser.FileNameExtensionFilter;
*/ */
public class GMSaver { public class GMSaver {
private File selectedFile; // Le fichier sélectionné pour sauvegarde /**
private JFrame parentFrame; // La fenêtre parent * Le fichier sélectionné pour sauvegarde
private GMGrid grid; // La grille de jeu à sauvegarder */
private File selectedFile;
/**
* La fenêtre parent
*/
private JFrame parentFrame;
/**
* La grille de jeu à sauvegarder
*/
private GMGrid grid;
/**
* Le testeur de grille
*/
private GMChecker testGrille; private GMChecker testGrille;
/** /**
@ -29,7 +43,11 @@ public class GMSaver {
this.testGrille = new GMChecker(this.grid); this.testGrille = new GMChecker(this.grid);
} }
public void saveGridIfNeeded() { /**
* Vérifie si la grille est valide, puis la sauvegarde si possible.
* Si la grille n'est pas valide, affiche un message d'erreur.
*/
public void saveGridIfPossible() {
if (isValidGrid()) { if (isValidGrid()) {
saveGrid(); saveGrid();
} else { } else {

View File

@ -1,19 +1,42 @@
import java.awt.event.ActionEvent; import java.awt.event.ActionEvent;
import java.awt.event.ActionListener; import java.awt.event.ActionListener;
/**
* GMSaverActionListener est un ActionListener utilisé pour écouter les événements de clic sur le bouton de sauvegarde.
* Lorsque l'événement se produit, il crée une instance de GMSaver et appelle la méthode saveGridIfNeeded().
* @version 1.0
* @author Moncef STITI
* @author Marco ORFAO
*/
public class GMSaverActionListener implements ActionListener { public class GMSaverActionListener implements ActionListener {
/**
* Fenêtre parente
*/
private Window parentFrame; private Window parentFrame;
/**
* Grille à sauvegarder
*/
private GMGrid grid; private GMGrid grid;
/**
* Constructeur de GMSaverActionListener.
* @param parentFrame La fenêtre parente.
* @param grid La grille à sauvegarder.
*/
public GMSaverActionListener(Window parentFrame, GMGrid grid) { public GMSaverActionListener(Window parentFrame, GMGrid grid) {
this.parentFrame = parentFrame; this.parentFrame = parentFrame;
this.grid = grid; this.grid = grid;
} }
/**
* Méthode appelée lorsqu'un événement de clic se produit.
* Crée une instance de GMSaver et appelle la méthode saveGridIfNeeded().
* @param e L'événement d'action.
*/
@Override @Override
public void actionPerformed(ActionEvent e) { public void actionPerformed(ActionEvent e) {
GMSaver gMSaver = new GMSaver(parentFrame, grid); GMSaver gMSaver = new GMSaver(parentFrame, grid);
gMSaver.saveGridIfNeeded(); gMSaver.saveGridIfPossible();
} }
} }

View File

@ -1,9 +1,19 @@
import java.awt.event.ActionEvent; import java.awt.event.ActionEvent;
import java.awt.event.ActionListener; import java.awt.event.ActionListener;
/**
* Contrôleur de l'interface utilisateur pour le GridMaker.
*/
public class GMUserInterfaceController implements ActionListener { public class GMUserInterfaceController implements ActionListener {
/**
* La fenêtre
*/
private Window window; private Window window;
/**
* Constructeur de GMUserInterfaceController
* @param window fenêtre parente
*/
public GMUserInterfaceController(Window window) { public GMUserInterfaceController(Window window) {
this.window = window; this.window = window;
} }

View File

@ -13,8 +13,19 @@ import java.awt.event.ActionListener;
* @author Marco ORFAO * @author Marco ORFAO
*/ */
public class GMUserInterfaceView { public class GMUserInterfaceView {
/**
* Barre de menu de l'interface utilisateur.
*/
private JMenuBar menuBar = new JMenuBar(); private JMenuBar menuBar = new JMenuBar();
/**
* Contenu de la fenêtre de l'application.
*/
private Container content; private Container content;
/**
* Grille du créateur de grille.
*/
private GMGrid grid; private GMGrid grid;
/** /**

View File

@ -10,20 +10,70 @@ import java.awt.Font;
* @author Marco ORFAO * @author Marco ORFAO
*/ */
public class GSCase extends JPanel { public class GSCase extends JPanel {
private int primaryValue; // Valeur principale de la case /**
private int secondaryValue = 0; // Deuxième valeur de la case (optionnelle) * Valeur principale de la case.
private int tertiaryValue = 0; // Troisième valeur de la case (optionnelle) */
private int quaternaryValue = 0; // Quatrième valeur de la case (optionnelle) private int primaryValue;
private String text = ""; // Texte affiché dans la case /**
protected boolean isInitial = false; // Indique si la valeur de la case est initiale * Deuxième valeur de la case (optionnelle).
protected boolean isActive = true; // Indique si la case est active */
private JLabel label = new JLabel(); // Étiquette pour afficher le texte private int secondaryValue = 0;
private byte digitCount = 0; // Compteur du nombre de valeurs insérées dans la case
protected int positionX; // Position X de la case dans la grille /**
protected int positionY; // Position Y de la case dans la grille * Troisième valeur de la case (optionnelle).
protected GSGrid parentGrid; // Grille parente de la case */
private GSCaseMouseListener mouseListener; // Écouteur pour les événements de souris private int tertiaryValue = 0;
/**
* Quatrième valeur de la case (optionnelle).
*/
private int quaternaryValue = 0;
/**
* Texte affiché dans la case.
*/
private String text = "";
/**
* Indique si la valeur de la case est initiale.
*/
protected boolean isInitial = false;
/**
* Indique si la case est active.
*/
protected boolean isActive = true;
/**
* Étiquette pour afficher le texte.
*/
private JLabel label = new JLabel();
/**
* Compteur du nombre de valeurs insérées dans la case.
*/
private byte digitCount = 0;
/**
* Position X de la case dans la grille.
*/
protected int positionX;
/**
* Position Y de la case dans la grille.
*/
protected int positionY;
/**
* Grille parente de la case.
*/
protected GSGrid parentGrid;
/**
* Écouteur pour les événements de souris.
*/
private GSCaseMouseListener mouseListener;
/** /**
* Constructeur de la classe GSCase. * Constructeur de la classe GSCase.
@ -59,9 +109,7 @@ public class GSCase extends JPanel {
public void initializeCell() { public void initializeCell() {
Font font = label.getFont(); Font font = label.getFont();
label.setFont(font.deriveFont(font.getSize() + 15f)); label.setFont(font.deriveFont(font.getSize() + 15f));
label.setText(this.text); label.setText(this.text);
this.setBackground(this.isInitial ? Color.lightGray : Color.white);
layoutSetup(); layoutSetup();
} }
@ -130,7 +178,7 @@ public class GSCase extends JPanel {
this.text = String.valueOf(this.primaryValue + " " + this.secondaryValue + " " + this.tertiaryValue + " " + this.quaternaryValue); this.text = String.valueOf(this.primaryValue + " " + this.secondaryValue + " " + this.tertiaryValue + " " + this.quaternaryValue);
} }
} }
this.setBackground(Color.PINK); this.setBackground(Color.CYAN);
layoutSetup(); layoutSetup();
} else if (checkInputValue(value)){ } else if (checkInputValue(value)){
this.setBackground(Color.RED); this.setBackground(Color.RED);

View File

@ -10,6 +10,9 @@ import java.awt.event.MouseListener;
* @author Marco ORFAO * @author Marco ORFAO
*/ */
public class GSCaseMouseListener implements MouseListener { public class GSCaseMouseListener implements MouseListener {
/*
* Case
*/
private GSCase casePanel; private GSCase casePanel;
/** /**
@ -29,7 +32,7 @@ public class GSCaseMouseListener implements MouseListener {
if (!casePanel.isInitial) { if (!casePanel.isInitial) {
casePanel.isActive = true; casePanel.isActive = true;
casePanel.setBackground(Color.GREEN); casePanel.setBackground(Color.GREEN);
casePanel.parentGrid.testActivity(casePanel.positionX, casePanel.positionY); casePanel.parentGrid.disableAllExcept(casePanel.positionX, casePanel.positionY);
} }
} }

View File

@ -10,14 +10,39 @@ import javax.swing.border.Border;
*/ */
public class GSGrid extends JLabel { public class GSGrid extends JLabel {
/**
* Taille de la grille de Sudoku.
*/
private static final int GRID_SIZE = 9; private static final int GRID_SIZE = 9;
/**
* Tableau représentant les données de la grille de Sudoku.
*/
private int[][] tableauGrille = new int[GRID_SIZE][GRID_SIZE]; private int[][] tableauGrille = new int[GRID_SIZE][GRID_SIZE];
/**
* Tableau bidimensionnel de cases représentant la grille de Sudoku.
*/
private GSCase[][] cases = new GSCase[GRID_SIZE][GRID_SIZE]; private GSCase[][] cases = new GSCase[GRID_SIZE][GRID_SIZE];
/**
* Menu associé à la grille de Sudoku.
*/
private GSMenu menu; private GSMenu menu;
/**
* Coordonnée X de la case active.
*/
private int activeX = 0; private int activeX = 0;
/**
* Coordonnée Y de la case active.
*/
private int activeY = 0; private int activeY = 0;
/**
* Indique si le jeu est en cours.
*/
private Boolean isPlaying; private Boolean isPlaying;
/** /**
@ -29,7 +54,9 @@ public class GSGrid extends JLabel {
initializeGrid(); initializeGrid();
} }
// Initialise la grille avec des cases vides /**
* Initialise la grille avec des cases vides
*/
private void initializeGrid() { private void initializeGrid() {
FlowLayout gestionnaire = new FlowLayout(); FlowLayout gestionnaire = new FlowLayout();
this.setLayout(gestionnaire); this.setLayout(gestionnaire);
@ -48,7 +75,12 @@ public class GSGrid extends JLabel {
this.add(gridContainer); this.add(gridContainer);
} }
// Détermine les bordures des cellules de la grille /**
* Détermine les bordures des cellules de la grille
* @param i L'indice de la ligne
* @param j L'indice de la colonne
* @return la bordure de la grille
*/
private Border determineBorder(int i, int j) { private Border determineBorder(int i, int j) {
int top = (i == 0) ? 5 : 1; int top = (i == 0) ? 5 : 1;
int bottom = ((i + 1) % 3 == 0) ? 5 : 1; int bottom = ((i + 1) % 3 == 0) ? 5 : 1;
@ -57,7 +89,11 @@ public class GSGrid extends JLabel {
return BorderFactory.createMatteBorder(top, left, bottom, right, Color.BLACK); return BorderFactory.createMatteBorder(top, left, bottom, right, Color.BLACK);
} }
// Applique les bordures aux cellules de la grille /**
* Applique les bordures aux cellules de la grille
* @param i L'indice de la ligne.
* @param j L'indice de la colonne.
*/
private void setCellBorder(int i, int j) { private void setCellBorder(int i, int j) {
cases[i][j].setBorder(determineBorder(i, j)); cases[i][j].setBorder(determineBorder(i, j));
} }
@ -103,8 +139,12 @@ public class GSGrid extends JLabel {
return cases[i][j].getValue(); return cases[i][j].getValue();
} }
// Désactive les cases autres que celle indiquée /**
public void testActivity(int x, int y){ * Désactive les cases autres que celle indiquée
* @param x L'indice de ligne.
* @param y L'indice de la colonne.
*/
public void disableAllExcept(int x, int y){
for (int i = 0 ; i < GRID_SIZE ; i++ ) { for (int i = 0 ; i < GRID_SIZE ; i++ ) {
for (int j = 0 ; j < GRID_SIZE ; j++ ) { for (int j = 0 ; j < GRID_SIZE ; j++ ) {
if (cases[i][j].getActivity() && (i != x || j != y)) { if (cases[i][j].getActivity() && (i != x || j != y)) {
@ -116,24 +156,38 @@ public class GSGrid extends JLabel {
} }
} }
// Retourne l'index X de la case active /**
* Retourne l'index X de la case active
* @return l'index X de la case active
*/
public int whoIsActive_X() { public int whoIsActive_X() {
return activeX; return activeX;
} }
// Retourne l'index Y de la case active /**
* Retourne l'index Y de la case active
* @return l'index Y de la case active
*/
public int whoIsActive_Y() { public int whoIsActive_Y() {
return activeY; return activeY;
} }
// Met à jour la valeur d'une case dans la grille /**
* Met à jour la valeur d'une case dans la grille
* @param x L'indice de la ligne.
* @param y L'indice de la colonne.
* @param val La nouvelle valeur à assigner.
*/
public void setValuetoCase(int x, int y, int val) { public void setValuetoCase(int x, int y, int val) {
if (cases[x][y].getActivity() && getMode()) { if (cases[x][y].getActivity() && getMode()) {
cases[x][y].updateValue(val); cases[x][y].updateValue(val);
} }
} }
// Vérifie si la grille est complète /**
* Vérifie si la grille est complète
* @return True si la grille est complète, false sinon.
*/
public Boolean isComplete(){ public Boolean isComplete(){
for (int i = 0 ; i < 9 ; i++ ) { for (int i = 0 ; i < 9 ; i++ ) {
for (int j = 0 ; j < 9 ; j++ ) { for (int j = 0 ; j < 9 ; j++ ) {
@ -145,17 +199,26 @@ public class GSGrid extends JLabel {
return false; return false;
} }
// Active ou désactive le mode de jeu /**
public void isPlaying(Boolean _bool) { * Active ou désactive le mode de jeu
this.isPlaying = _bool; * @param isPlayingOrNot Un booléen indiquant si le mode de jeu est activé ou désactivé.
*/
public void isPlaying(Boolean isPlayingOrNot) {
this.isPlaying = isPlayingOrNot;
} }
// Retourne le mode de jeu /**
* Retourne si le jeu est en cours ou non
* @return si le jeu est en cours ou non
*/
public Boolean getMode() { public Boolean getMode() {
return this.isPlaying; return this.isPlaying;
} }
// Résout le Sudoku /**
* Résout le Sudoku
* @return true si le Sudoku est résolu avec succès, sinon false.
*/
public boolean solve() { public boolean solve() {
for (int row = 0; row < 9; row++) { for (int row = 0; row < 9; row++) {
for (int column = 0; column < 9; column++) { for (int column = 0; column < 9; column++) {

View File

@ -33,7 +33,6 @@ public class GSImport {
/** /**
* Constructeur pour créer une instance de GridMakerImport. * Constructeur pour créer une instance de GridMakerImport.
* @param frame La fenêtre précédente * @param frame La fenêtre précédente
* @param sudokuGrid La grille Sudoku
*/ */
public GSImport(Window frame) { public GSImport(Window frame) {
this.previousFrame = frame; this.previousFrame = frame;

View File

@ -69,7 +69,7 @@ public class GSPlay {
/** /**
* Constructeur de la classe GSPlay. * Constructeur de la classe GSPlay.
* @param grille La grille de Sudoku. * @param grille La grille de Sudoku.
* @param frame La fenêtre principale. * @param window La fenêtre principale.
*/ */
public GSPlay(Window window, GSGrid grille) { public GSPlay(Window window, GSGrid grille) {
this.ma_Grille = grille; this.ma_Grille = grille;

View File

@ -1,4 +1,21 @@
/**
* Classe principale pour le GridMaker.
* @version 1.0
* @author Moncef STITI
* @author Marco ORFAO
*/
public class GridMaker { public class GridMaker {
/**
* Constructeur par défaut de la classe GridMaker.
*/
public GridMaker() {
// Ce constructeur est laissé vide intentionnellement
}
/**
* Méthode principale pour démarrer le GridMaker.
* @param args Les arguments de la ligne de commande (non utilisés dans cette application).
*/
public static void main(String[] args) { public static void main(String[] args) {
Window fenetre = new Window(); // Création d'une fenêtre Window fenetre = new Window(); // Création d'une fenêtre
String[] gmButtonTexts = {"Générer une grille", "Règles", "Quitter"}; // Texte des boutons pour le menu du GridMaker String[] gmButtonTexts = {"Générer une grille", "Règles", "Quitter"}; // Texte des boutons pour le menu du GridMaker

View File

@ -1,4 +1,22 @@
/**
* Classe principale pour le GridSolver.
* @version 1.0
* @author Moncef STITI
* @author Marco ORFAO
*/
public class GridSolver { public class GridSolver {
/**
* Constructeur par défaut de la classe GridSolver.
*/
public GridSolver() {
// Ce constructeur est laissé vide intentionnellement
}
/**
* Méthode principale pour démarrer le GridSolver.
* @param args Les arguments de la ligne de commande (non utilisés dans cette application).
*/
public static void main(String[] args) { public static void main(String[] args) {
Window fenetre = new Window(); // Création d'une fenêtre Window fenetre = new Window(); // Création d'une fenêtre
String[] gsButtonTexts = {"Jouer", "Règles", "Quitter"}; // Texte des boutons pour le menu du GridSolver String[] gsButtonTexts = {"Jouer", "Règles", "Quitter"}; // Texte des boutons pour le menu du GridSolver

View File

@ -14,30 +14,94 @@ import java.util.List;
*/ */
public class HomeView extends JPanel { public class HomeView extends JPanel {
// Constantes pour les chemins des icônes et des fichiers audio, ainsi que pour les dimensions et les couleurs /**
* La chemin pour accéder à l'image "iconeAudio.png"
*/
private final String AUDIO_ON = "img/iconeAudio.png"; private final String AUDIO_ON = "img/iconeAudio.png";
/**
* La chemin pour accéder à l'image "AudioMuted.png"
*/
private final String AUDIO_OFF = "img/iconeAudioMuted.png"; private final String AUDIO_OFF = "img/iconeAudioMuted.png";
/**
* Le chemin pour accéder à la musique
*/
private final String MUSIC_FILE = "audio/musiqueDeFond.wav"; private final String MUSIC_FILE = "audio/musiqueDeFond.wav";
/**
* La taille des boutons
*/
private final Dimension BUTTON_SIZE = new Dimension(300, 60); private final Dimension BUTTON_SIZE = new Dimension(300, 60);
/**
* La couleur d'arrière plan
*/
private final Color BACKGROUND_COLOR = new Color(54, 91, 109); private final Color BACKGROUND_COLOR = new Color(54, 91, 109);
/**
* La couleur du texte du titre
*/
private final Color TITLE_TEXT_COLOR = Color.WHITE; private final Color TITLE_TEXT_COLOR = Color.WHITE;
/**
* La police d'écriture du texte du titre
*/
private final Font TITLE_FONT = new Font("Copperplate", Font.BOLD, 75); private final Font TITLE_FONT = new Font("Copperplate", Font.BOLD, 75);
/**
* La police d'écriture du sous-titre
*/
private final Font SUBTITLE_FONT = new Font("Copperplate", Font.PLAIN, 24); private final Font SUBTITLE_FONT = new Font("Copperplate", Font.PLAIN, 24);
/**
* La police d'écriture du texte des boutons
*/
private final Font BUTTON_FONT = new Font("Copperplate", Font.BOLD, 24); private final Font BUTTON_FONT = new Font("Copperplate", Font.BOLD, 24);
private final String[] BUTTON_TEXTS; // Textes des boutons /**
private final Title[] labels; // Tableau de titres pour le titre principal et le sous-titre * Textes des boutons
private MusicButton musicButton; // Bouton pour contrôler la musique */
private final Window window; // Fenêtre parente private final String[] BUTTON_TEXTS;
private JPanel titlePanel; // Panneau pour le titre
private JPanel buttonPanel; // Panneau pour les boutons /**
private JLabel imageLabel; // Étiquette pour l'image * Tableau de titres pour le titre principal et le sous-titre
private List<Button> buttonsList; // Liste des boutons créés */
private final Title[] labels;
/**
* Bouton pour contrôler la musique
*/
private MusicButton musicButton;
/**
* Fenêtre parente
*/
private final Window window;
/**
* Panneau pour le titre
*/
private JPanel titlePanel;
/**
* Panneau pour les boutons
*/
private JPanel buttonPanel;
/**
* Étiquette pour l'image
*/
private JLabel imageLabel;
/**
* Liste des boutons créés
*/
private List<Button> buttonsList;
/** /**
* Constructeur de la classe HomeView. * Constructeur de la classe HomeView.
* Initialise la fenêtre parente et crée les composants de la page d'accueil. * Initialise la fenêtre parente et crée les composants de la page d'accueil.
*
* @param window La fenêtre parente. * @param window La fenêtre parente.
* @param mainTitle Le titre principal de la page. * @param mainTitle Le titre principal de la page.
* @param subTitle Le sous-titre de la page. * @param subTitle Le sous-titre de la page.

View File

@ -8,6 +8,13 @@ import javax.swing.JOptionPane;
* @author Marco ORFAO * @author Marco ORFAO
*/ */
public class RulesDialogManager implements DialogManager { public class RulesDialogManager implements DialogManager {
/**
* Constructeur par défaut de RulesDialogManager.
*/
public RulesDialogManager() {
// Ce constructeur est laissé vide intentionnellement
}
/** /**
* Affiche la boîte de dialogue des règles du Sudoku. * Affiche la boîte de dialogue des règles du Sudoku.
*/ */