Séparation des programmes
This commit is contained in:
parent
e11400fbd0
commit
064ba1a91f
19
Makefile
19
Makefile
@ -1,19 +1,10 @@
|
||||
# If the first argument is "run"...
|
||||
ifeq (run,$(firstword $(MAKECMDGOALS)))
|
||||
# use the rest as arguments for "run"
|
||||
RUN_ARGS := $(wordlist 2,$(words $(MAKECMDGOALS)),$(MAKECMDGOALS))
|
||||
# ...and turn them into do-nothing targets
|
||||
$(eval $(RUN_ARGS):;@:)
|
||||
endif
|
||||
|
||||
### VARIABLES ###
|
||||
|
||||
JC := javac
|
||||
JCFLAGS := -encoding UTF-8 -implicit:none
|
||||
JVM := java
|
||||
JVMFLAGS :=
|
||||
|
||||
SRCDIR := ./src/GridSolver
|
||||
SRCDIR := ./src
|
||||
OUTDIR := ./out
|
||||
DOCDIR := ./doc
|
||||
SRC := $(wildcard $(SRCDIR)/*.java)
|
||||
@ -25,11 +16,13 @@ $(OUTDIR)/%.class : $(SRCDIR)/%.java
|
||||
@mkdir -p $(@D)
|
||||
${JC} ${JCFLAGS} -cp $(SRCDIR) -d $(OUTDIR) $<
|
||||
|
||||
|
||||
### REGLES OPTIONNELLES ###
|
||||
|
||||
run : $(OFILES)
|
||||
${JVM} ${JVMFLAGS} -cp $(OUTDIR) Main $(RUN_ARGS)
|
||||
GridMaker : $(OFILES)
|
||||
${JVM} ${JVMFLAGS} -cp $(OUTDIR) GridMaker $(RUN_ARGS)
|
||||
|
||||
GridSolver : $(OFILES)
|
||||
${JVM} ${JVMFLAGS} -cp $(OUTDIR) GridSolver $(RUN_ARGS)
|
||||
|
||||
clean :
|
||||
-rm -rf $(OUTDIR)
|
||||
|
@ -8,7 +8,7 @@ import javax.swing.*;
|
||||
* @author Moncef STITI
|
||||
* @author Marco ORFAO
|
||||
*/
|
||||
public class GridMakerCase extends JPanel {
|
||||
public class GMCase extends JPanel {
|
||||
|
||||
private int cellValue = 0; // Valeur actuelle de la case
|
||||
private String displayText = ""; // Texte à afficher dans la case
|
||||
@ -18,7 +18,7 @@ public class GridMakerCase extends JPanel {
|
||||
* Constructeur par défaut de GridMakerCase.
|
||||
* Initialise le bouton avec les propriétés nécessaires, crée un GridMakerCaseListener et l'ajoute au bouton.
|
||||
*/
|
||||
public GridMakerCase() {
|
||||
public GMCase() {
|
||||
actionButton.setOpaque(false);
|
||||
actionButton.setContentAreaFilled(false);
|
||||
actionButton.setBorderPainted(false);
|
||||
@ -31,7 +31,7 @@ public class GridMakerCase extends JPanel {
|
||||
setPreferredSize(new Dimension(60, 60));
|
||||
|
||||
// Crée un GridMakerCaseListener et l'ajoute au bouton
|
||||
GridMakerCaseListener listener = new GridMakerCaseListener(this);
|
||||
GMCaseListener listener = new GMCaseListener(this);
|
||||
actionButton.addKeyListener(listener);
|
||||
}
|
||||
|
@ -7,15 +7,15 @@ import java.awt.event.KeyListener;
|
||||
* @author Moncef STITI
|
||||
* @author Marco ORFAO
|
||||
*/
|
||||
public class GridMakerCaseListener implements KeyListener {
|
||||
public class GMCaseListener implements KeyListener {
|
||||
|
||||
private GridMakerCase gridMakerCase;
|
||||
private GMCase gridMakerCase;
|
||||
|
||||
/**
|
||||
* Constructeur de GridMakerCaseListener.
|
||||
* @param gridMakerCase La case à écouter.
|
||||
*/
|
||||
public GridMakerCaseListener(GridMakerCase gridMakerCase) {
|
||||
public GMCaseListener(GMCase gridMakerCase) {
|
||||
this.gridMakerCase = gridMakerCase;
|
||||
}
|
||||
|
@ -1,24 +1,24 @@
|
||||
import javax.swing.*;
|
||||
|
||||
/**
|
||||
* La classe GridMakerChecker est utilisée pour vérifier la cohérence de la grille.
|
||||
* La classe GMChecker est utilisée pour vérifier la cohérence de la grille.
|
||||
* Elle vérifie si les lignes, les colonnes et les régions de la grille respectent les règles du jeu.
|
||||
* @version 1.0
|
||||
* @author Moncef STITI
|
||||
* @author Marco ORFAO
|
||||
*/
|
||||
public class GridMakerChecker {
|
||||
public class GMChecker {
|
||||
|
||||
private GridMakerGrid grid;
|
||||
private GridMakerCheckerListener checkerListener;
|
||||
private GMGrid grid;
|
||||
private GMCheckerListener checkerListener;
|
||||
|
||||
/**
|
||||
* Constructeur pour créer une instance de GridMakerChecker.
|
||||
* Constructeur pour créer une instance de GMChecker.
|
||||
* @param grid La grille à vérifier
|
||||
*/
|
||||
public GridMakerChecker(GridMakerGrid grid) {
|
||||
public GMChecker(GMGrid grid) {
|
||||
this.grid = grid;
|
||||
this.checkerListener = new GridMakerCheckerListener(this);
|
||||
this.checkerListener = new GMCheckerListener(this);
|
||||
}
|
||||
|
||||
|
28
src/GMCheckerListener.java
Normal file
28
src/GMCheckerListener.java
Normal file
@ -0,0 +1,28 @@
|
||||
import java.awt.event.ActionEvent;
|
||||
import java.awt.event.ActionListener;
|
||||
|
||||
/**
|
||||
* La classe GMCheckerListener est utilisée pour gérer les événements liés à la vérification de la grille.
|
||||
*/
|
||||
public class GMCheckerListener implements ActionListener {
|
||||
|
||||
private GMChecker gridMakerChecker;
|
||||
|
||||
/**
|
||||
* Constructeur de GMCheckerListener.
|
||||
* @param gridMakerChecker L'instance de GMChecker à utiliser.
|
||||
*/
|
||||
public GMCheckerListener(GMChecker gridMakerChecker) {
|
||||
this.gridMakerChecker = gridMakerChecker;
|
||||
}
|
||||
|
||||
/**
|
||||
* Méthode invoquée lorsqu'un bouton est cliqué.
|
||||
* Lance la vérification de la grille.
|
||||
* @param e L'événement d'action
|
||||
*/
|
||||
@Override
|
||||
public void actionPerformed(ActionEvent e) {
|
||||
gridMakerChecker.checkGrid();
|
||||
}
|
||||
}
|
@ -12,16 +12,16 @@ import javax.swing.border.Border;
|
||||
* @author Moncef STITI
|
||||
* @author Marco ORFAO
|
||||
*/
|
||||
public class GridMakerGrid extends JPanel {
|
||||
public class GMGrid extends JPanel {
|
||||
|
||||
private int[][] gridValues = new int[9][9]; // Stores the values of each cell in the grid
|
||||
private GridMakerCase[][] gridCases = new GridMakerCase[9][9]; // Represents the individual cells in the grid
|
||||
private GMCase[][] gridCases = new GMCase[9][9]; // Represents the individual cells in the grid
|
||||
private int[] exportedGrid = new int[9]; // Stores the grid values in an exportable format
|
||||
|
||||
/**
|
||||
* Constructs a new GridMakerGrid object and initializes the grid.
|
||||
* Constructs a new GMGrid object and initializes the grid.
|
||||
*/
|
||||
public GridMakerGrid() {
|
||||
public GMGrid() {
|
||||
setupGrid();
|
||||
setBackground(new Color(54, 91, 109)); // On change la couleur de fond (les cotés de la grille)
|
||||
}
|
||||
@ -53,7 +53,7 @@ public class GridMakerGrid extends JPanel {
|
||||
for (int j = 0; j < 9; j++) {
|
||||
int zoneRow = i / 3;
|
||||
int zoneCol = j / 3;
|
||||
gridCases[i][j] = new GridMakerCase();
|
||||
gridCases[i][j] = new GMCase();
|
||||
zones[zoneRow][zoneCol].add(gridCases[i][j]);
|
||||
gridCases[i][j].setBorder(determineBorder(i, j)); // Utilisation de la fonction pour définir les bordures
|
||||
}
|
@ -8,7 +8,7 @@ import java.awt.event.ActionListener;
|
||||
* @author Moncef STITI
|
||||
* @author Marco ORFAO
|
||||
*/
|
||||
class HomeButtonClickListener implements ActionListener {
|
||||
class GMHomeButtonClickListener implements ActionListener {
|
||||
private Window window;
|
||||
private DialogManager rulesDialogManager;
|
||||
|
||||
@ -16,7 +16,7 @@ class HomeButtonClickListener implements ActionListener {
|
||||
* Constructs a ButtonClickListener with the specified window.
|
||||
* @param window The window where the actions will be performed.
|
||||
*/
|
||||
public HomeButtonClickListener(Window window) {
|
||||
public GMHomeButtonClickListener(Window window) {
|
||||
this.window = window;
|
||||
this.rulesDialogManager = new RulesDialogManager();
|
||||
}
|
||||
@ -31,7 +31,7 @@ class HomeButtonClickListener implements ActionListener {
|
||||
switch (buttonText) {
|
||||
case "Générer une grille":
|
||||
Window.removeAllComponents(this.window);
|
||||
GridMakeUserInterfaceView vueCreationGrille = new GridMakeUserInterfaceView(this.window); // Lancer le créateur de grille
|
||||
GMUserInterfaceView vueCreationGrille = new GMUserInterfaceView(this.window); // Lancer le créateur de grille
|
||||
break;
|
||||
case "Règles":
|
||||
rulesDialogManager.showDialog(); // Afficher les règles
|
@ -10,7 +10,7 @@ import java.awt.*;
|
||||
* @author Moncef STITI
|
||||
* @author Marco ORFAO
|
||||
*/
|
||||
public class HomeView extends JPanel {
|
||||
public class GMHomeView extends JPanel {
|
||||
|
||||
// Constantes pour les chemins des icônes et des fichiers audio, ainsi que pour les dimensions et les couleurs
|
||||
private final String AUDIO_ON = "img/iconeAudio.png";
|
||||
@ -41,7 +41,7 @@ public class HomeView extends JPanel {
|
||||
* Initialise la fenêtre parente et crée les composants de la page d'accueil.
|
||||
* @param window La fenêtre parente.
|
||||
*/
|
||||
public HomeView(Window window) {
|
||||
public GMHomeView(Window window) {
|
||||
this.window = window;
|
||||
createComponents();
|
||||
addComponentsToWindow();
|
||||
@ -70,7 +70,7 @@ public class HomeView extends JPanel {
|
||||
buttonPanel.setLayout(buttonLayout);
|
||||
buttonPanel.setBorder(BorderFactory.createEmptyBorder(20, 20, 20, 20));
|
||||
buttonPanel.setBackground(BACKGROUND_COLOR);
|
||||
HomeButtonClickListener listenerButton = new HomeButtonClickListener(window);
|
||||
GMHomeButtonClickListener listenerButton = new GMHomeButtonClickListener(window);
|
||||
for (String text : BUTTON_TEXTS) {
|
||||
Button button = new Button(text, BUTTON_SIZE, BUTTON_FONT, Color.white);
|
||||
button.addActionListener(listenerButton);
|
@ -1,21 +1,21 @@
|
||||
import java.awt.event.*;
|
||||
|
||||
/**
|
||||
* La classe GridMakerHowToCreateController est un contrôleur qui gère l'affichage de la fenêtre de création de grille.
|
||||
* La classe GMHowToCreateController est un contrôleur qui gère l'affichage de la fenêtre de création de grille.
|
||||
* Elle implémente l'interface ActionListener pour réagir aux événements de clic sur un bouton.
|
||||
* @version 1.0
|
||||
* @author Moncef STITI
|
||||
* @author Marco ORFAO
|
||||
*/
|
||||
public class GridMakerHowToCreateController implements ActionListener {
|
||||
private GridMakerHowToCreateDialogManager howToCreateGrid;
|
||||
public class GMHowToCreateController implements ActionListener {
|
||||
private GMHowToCreateDialogManager howToCreateGrid;
|
||||
|
||||
/**
|
||||
* Constructeur pour créer une instance de GridMakerHowToCreateController.
|
||||
* Constructeur pour créer une instance de GMHowToCreateController.
|
||||
* Initialise le gestionnaire de dialogue pour la création de grille.
|
||||
*/
|
||||
public GridMakerHowToCreateController(){
|
||||
this.howToCreateGrid = new GridMakerHowToCreateDialogManager();
|
||||
public GMHowToCreateController(){
|
||||
this.howToCreateGrid = new GMHowToCreateDialogManager();
|
||||
}
|
||||
|
||||
/**
|
@ -1,21 +1,21 @@
|
||||
import javax.swing.JOptionPane;
|
||||
|
||||
/**
|
||||
* La classe GridMakerHowToCreateDialogManager est un gestionnaire de dialogue qui affiche des instructions
|
||||
* La classe GMHowToCreateDialogManager est un gestionnaire de dialogue qui affiche des instructions
|
||||
* sur la manière de créer une grille dans une boîte de dialogue.
|
||||
* Elle implémente l'interface DialogManager.
|
||||
* @version 1.0
|
||||
* @author Moncef STITI
|
||||
* @author Marco ORFAO
|
||||
*/
|
||||
public class GridMakerHowToCreateDialogManager implements DialogManager {
|
||||
public class GMHowToCreateDialogManager implements DialogManager {
|
||||
|
||||
/**
|
||||
* Méthode pour afficher la boîte de dialogue avec les instructions de création de grille.
|
||||
*/
|
||||
@Override
|
||||
public void showDialog() {
|
||||
GridMakerHowToCreateView howToCreateGrid = new GridMakerHowToCreateView();
|
||||
GMHowToCreateView howToCreateGrid = new GMHowToCreateView();
|
||||
JOptionPane.showMessageDialog(null, howToCreateGrid, "Comment créer une grille ?", JOptionPane.PLAIN_MESSAGE);
|
||||
}
|
||||
}
|
@ -2,13 +2,13 @@ import javax.swing.*;
|
||||
import java.awt.*;
|
||||
|
||||
/**
|
||||
* La classe GridMakerHowToCreateView est une vue qui affiche les instructions pour créer une grille dans une boîte de dialogue.
|
||||
* La classe GMHowToCreateView est une vue qui affiche les instructions pour créer une grille dans une boîte de dialogue.
|
||||
* Elle hérite de JPanel pour servir de composant d'interface utilisateur.
|
||||
* @version 1.0
|
||||
* @author Moncef STITI
|
||||
* @author Marco ORFAO
|
||||
*/
|
||||
public class GridMakerHowToCreateView extends JPanel {
|
||||
public class GMHowToCreateView extends JPanel {
|
||||
private Dimension FRAME_SIZE = new Dimension(600, 500);
|
||||
private Color BACKGROUND_COLOR = new Color(54, 91, 109);
|
||||
|
||||
@ -25,10 +25,10 @@ public class GridMakerHowToCreateView extends JPanel {
|
||||
private Font TEXT_FONT = new Font("Arial", Font.PLAIN, 20);
|
||||
|
||||
/**
|
||||
* Constructeur pour créer une instance de GridMakerHowToCreateView.
|
||||
* Constructeur pour créer une instance de GMHowToCreateView.
|
||||
* Initialise les composants de la vue et les dispose selon un BorderLayout.
|
||||
*/
|
||||
public GridMakerHowToCreateView() {
|
||||
public GMHowToCreateView() {
|
||||
BorderLayout borderLayout = new BorderLayout();
|
||||
this.setLayout(borderLayout);
|
||||
this.setBackground(this.BACKGROUND_COLOR); // Définit la couleur d'arrière-plan du panneau
|
@ -4,26 +4,26 @@ import javax.swing.filechooser.FileNameExtensionFilter;
|
||||
import java.io.*;
|
||||
|
||||
/**
|
||||
* La classe GridMakerImport est utilisée pour importer une grille à partir d'un fichier.
|
||||
* La classe GMImport est utilisée pour importer une grille à partir d'un fichier.
|
||||
* Elle implémente l'interface ActionListener pour réagir aux événements de clic sur un bouton.
|
||||
* @version 1.0
|
||||
* @author Moncef STITI
|
||||
* @author Marco ORFAO
|
||||
*/
|
||||
public class GridMakerImport implements ActionListener {
|
||||
public class GMImport implements ActionListener {
|
||||
|
||||
private JFrame previousFrame;
|
||||
private GridMakerGrid grid;
|
||||
private GMGrid grid;
|
||||
private boolean accessible;
|
||||
private File file;
|
||||
private int[] importedValues = new int[9];
|
||||
|
||||
/**
|
||||
* Constructeur pour créer une instance de GridMakerImport.
|
||||
* Constructeur pour créer une instance de GMImport.
|
||||
* @param frame La fenêtre précédente
|
||||
* @param sudokuGrid La grille Sudoku
|
||||
*/
|
||||
public GridMakerImport(JFrame frame, GridMakerGrid sudokuGrid) {
|
||||
public GMImport(JFrame frame, GMGrid sudokuGrid) {
|
||||
this.previousFrame = frame;
|
||||
this.grid = sudokuGrid;
|
||||
}
|
@ -2,25 +2,25 @@ import java.awt.event.ActionEvent;
|
||||
import java.awt.event.ActionListener;
|
||||
|
||||
/**
|
||||
* La classe GridMakerResetGrid sert à crée une nouvelle grille de 0.
|
||||
* La classe GMResetGrid sert à crée une nouvelle grille de 0.
|
||||
*
|
||||
* @version 1.0
|
||||
* @author Moncef STITI
|
||||
* @author Marco ORFAO
|
||||
*/
|
||||
|
||||
public class GridMakerResetGrid implements ActionListener {
|
||||
public class GMResetGrid implements ActionListener {
|
||||
|
||||
/**
|
||||
* La grille à réinitialiser.
|
||||
*/
|
||||
private GridMakerGrid myGrid;
|
||||
private GMGrid myGrid;
|
||||
|
||||
/**
|
||||
* Constructeur pour créer une instance de GridMakerResetGrid.
|
||||
* Constructeur pour créer une instance de GMResetGrid.
|
||||
* @param grid Grille à réinitialiser
|
||||
*/
|
||||
public GridMakerResetGrid(GridMakerGrid grid) {
|
||||
public GMResetGrid(GMGrid grid) {
|
||||
this.myGrid = grid;
|
||||
}
|
||||
|
@ -1,20 +1,20 @@
|
||||
import java.awt.event.*;
|
||||
|
||||
/**
|
||||
* GridMakerRules gère les actions liées aux règles du jeu.
|
||||
* GMRules gère les actions liées aux règles du jeu.
|
||||
* Cette classe implémente ActionListener pour réagir aux clics sur un bouton.
|
||||
* @version 1.0
|
||||
* @author Moncef STITI
|
||||
* @author Marco ORFAO
|
||||
*/
|
||||
public class GridMakerRules implements ActionListener {
|
||||
public class GMRules implements ActionListener {
|
||||
private RulesDialogManager rulesDialog; // Gestionnaire de la boîte de dialogue des règles
|
||||
|
||||
/**
|
||||
* Constructeur de GridMakerRules.
|
||||
* Constructeur de GMRules.
|
||||
* Initialise le gestionnaire de boîte de dialogue des règles.
|
||||
*/
|
||||
public GridMakerRules(){
|
||||
public GMRules(){
|
||||
this.rulesDialog = new RulesDialogManager();
|
||||
}
|
||||
|
@ -13,18 +13,18 @@ import java.awt.event.ActionEvent;
|
||||
* @author Moncef STITI
|
||||
* @author Marco ORFAO
|
||||
*/
|
||||
public class GridMakerSaver implements ActionListener {
|
||||
public class GMSaver implements ActionListener {
|
||||
|
||||
private File selectedFile; // Le fichier sélectionné pour sauvegarde
|
||||
private JFrame parentFrame; // La fenêtre parent
|
||||
private GridMakerGrid grid; // La grille de jeu à sauvegarder
|
||||
private GMGrid grid; // La grille de jeu à sauvegarder
|
||||
|
||||
/**
|
||||
* Constructeur de la classe GridMakerSaver.
|
||||
* Constructeur de la classe GMSaver.
|
||||
* @param parentFrame La fenêtre parent.
|
||||
* @param grid La grille de jeu à sauvegarder.
|
||||
*/
|
||||
public GridMakerSaver(JFrame parentFrame, GridMakerGrid grid) {
|
||||
public GMSaver(JFrame parentFrame, GMGrid grid) {
|
||||
this.parentFrame = parentFrame;
|
||||
this.grid = grid;
|
||||
}
|
||||
@ -48,7 +48,7 @@ public class GridMakerSaver implements ActionListener {
|
||||
* @return true si la grille est valide, sinon false.
|
||||
*/
|
||||
private boolean isValidGrid() {
|
||||
GridMakerChecker test = new GridMakerChecker(grid);
|
||||
GMChecker test = new GMChecker(grid);
|
||||
return test.isCorrect();
|
||||
}
|
||||
|
@ -1,10 +1,10 @@
|
||||
import java.awt.event.ActionEvent;
|
||||
import java.awt.event.ActionListener;
|
||||
|
||||
public class GridMakeUserInterfaceController implements ActionListener {
|
||||
public class GMUserInterfaceController implements ActionListener {
|
||||
private Window window;
|
||||
|
||||
public GridMakeUserInterfaceController(Window window) {
|
||||
public GMUserInterfaceController(Window window) {
|
||||
this.window = window;
|
||||
}
|
||||
|
@ -6,18 +6,18 @@ import java.awt.BorderLayout;
|
||||
import java.awt.event.ActionListener;
|
||||
|
||||
|
||||
public class GridMakeUserInterfaceView {
|
||||
public class GMUserInterfaceView {
|
||||
private JMenuBar menuBar = new JMenuBar();
|
||||
private Container content;
|
||||
private GridMakerGrid grid;
|
||||
private GMGrid grid;
|
||||
|
||||
public GridMakeUserInterfaceView(Window window) {
|
||||
public GMUserInterfaceView(Window window) {
|
||||
window.setPageTitle("Créateur de grille");
|
||||
|
||||
content = window.getContentPane();
|
||||
BorderLayout gestionnaire = new BorderLayout();
|
||||
content.setLayout(gestionnaire);
|
||||
grid = new GridMakerGrid();
|
||||
grid = new GMGrid();
|
||||
|
||||
// Création des menus
|
||||
JMenu menuFichier = createMenu("Fichier");
|
||||
@ -25,20 +25,20 @@ public class GridMakeUserInterfaceView {
|
||||
JMenu menuAide = createMenu("Aide");
|
||||
|
||||
// Ajout des éléments de menu
|
||||
JMenuItem nouveauItem = createMenuItem("Nouveau", new GridMakerResetGrid(grid));
|
||||
JMenuItem chargerItem = createMenuItem("Charger", new GridMakerImport(window, grid));
|
||||
JMenuItem sauvegarderItem = createMenuItem("Sauvegarder", new GridMakerSaver(window, grid));
|
||||
GridMakerChecker checker = new GridMakerChecker(grid); // Créez une instance de GridMakerChecker
|
||||
GridMakerCheckerListener checkerListener = new GridMakerCheckerListener(checker); // Créez une instance de GridMakerCheckerListener en passant GridMakerChecker en argument
|
||||
JMenuItem nouveauItem = createMenuItem("Nouveau", new GMResetGrid(grid));
|
||||
JMenuItem chargerItem = createMenuItem("Charger", new GMImport(window, grid));
|
||||
JMenuItem sauvegarderItem = createMenuItem("Sauvegarder", new GMSaver(window, grid));
|
||||
GMChecker checker = new GMChecker(grid); // Créez une instance de GMChecker
|
||||
GMCheckerListener checkerListener = new GMCheckerListener(checker); // Créez une instance de GMCheckerListener en passant GMChecker en argument
|
||||
JMenuItem verifierItem = createMenuItem("Vérifier", checkerListener);
|
||||
JMenuItem aideGrilleItem = createMenuItem("Comment créer une grille", new GridMakerHowToCreateController());
|
||||
JMenuItem reglesSudokuItem = createMenuItem("Règles du Sudoku", new GridMakerRules());
|
||||
JMenuItem aideGrilleItem = createMenuItem("Comment créer une grille", new GMHowToCreateController());
|
||||
JMenuItem reglesSudokuItem = createMenuItem("Règles du Sudoku", new GMRules());
|
||||
|
||||
|
||||
// Ajout du menu "Jouer"
|
||||
JMenu menuJouer = createMenu("Quitter");
|
||||
// Création de l'élément de menu "Retour"
|
||||
JMenuItem retourMenu = createMenuItem("Quitter",new GridMakeUserInterfaceController(window));
|
||||
JMenuItem retourMenu = createMenuItem("Quitter",new GMUserInterfaceController(window));
|
||||
// Ajout de l'élément "Retour" au menu "Jouer"
|
||||
menuJouer.add(retourMenu);
|
||||
// Ajout du menu "Jouer" à la barre de menu
|
@ -8,7 +8,7 @@ import java.awt.event.ActionListener;
|
||||
* @author Moncef STITI
|
||||
* @author Marco ORFAO
|
||||
*/
|
||||
class HomeButtonClickListener implements ActionListener {
|
||||
class GSHomeButtonClickListener implements ActionListener {
|
||||
private Window window;
|
||||
private DialogManager rulesDialogManager;
|
||||
private GSMenu menuJeu;
|
||||
@ -17,7 +17,7 @@ class HomeButtonClickListener implements ActionListener {
|
||||
* Constructs a ButtonClickListener with the specified window.
|
||||
* @param window The window where the actions will be performed.
|
||||
*/
|
||||
public HomeButtonClickListener(Window window) {
|
||||
public GSHomeButtonClickListener(Window window) {
|
||||
this.window = window;
|
||||
this.rulesDialogManager = new RulesDialogManager();
|
||||
}
|
@ -10,7 +10,7 @@ import java.awt.*;
|
||||
* @author Moncef STITI
|
||||
* @author Marco ORFAO
|
||||
*/
|
||||
public class HomeView extends JPanel {
|
||||
public class GSHomeView extends JPanel {
|
||||
|
||||
// Constantes pour les chemins des icônes et des fichiers audio, ainsi que pour les dimensions et les couleurs
|
||||
private final String AUDIO_ON = "img/iconeAudio.png";
|
||||
@ -41,7 +41,7 @@ public class HomeView extends JPanel {
|
||||
* Initialise la fenêtre parente et crée les composants de la page d'accueil.
|
||||
* @param window La fenêtre parente.
|
||||
*/
|
||||
public HomeView(Window window) {
|
||||
public GSHomeView(Window window) {
|
||||
this.window = window;
|
||||
createComponents();
|
||||
addComponentsToWindow();
|
||||
@ -70,7 +70,7 @@ public class HomeView extends JPanel {
|
||||
buttonPanel.setLayout(buttonLayout);
|
||||
buttonPanel.setBorder(BorderFactory.createEmptyBorder(20, 20, 20, 20));
|
||||
buttonPanel.setBackground(BACKGROUND_COLOR);
|
||||
HomeButtonClickListener listenerButton = new HomeButtonClickListener(window);
|
||||
GSHomeButtonClickListener listenerButton = new GSHomeButtonClickListener(window);
|
||||
for (String text : BUTTON_TEXTS) {
|
||||
Button button = new Button(text, BUTTON_SIZE, BUTTON_FONT, Color.white);
|
||||
button.addActionListener(listenerButton);
|
@ -1,6 +1,6 @@
|
||||
public class Main{
|
||||
public class GridMaker{
|
||||
public static void main(String[] args) {
|
||||
Window fenetre = new Window(); // Création d'une fenêtre
|
||||
HomeView menu = new HomeView(fenetre); // Création du menu sur la fenêtre
|
||||
GMHomeView menu = new GMHomeView(fenetre); // Création du menu sur la fenêtre
|
||||
}
|
||||
}
|
@ -1,72 +0,0 @@
|
||||
import javax.swing.*;
|
||||
import java.awt.*;
|
||||
|
||||
/**
|
||||
* Class containing custom settings for JButtons.
|
||||
* @version 1.0
|
||||
* @author Moncef STITI
|
||||
* @author Marco ORFAO
|
||||
*/
|
||||
|
||||
public class Button extends JButton {
|
||||
/**
|
||||
* Constructor
|
||||
* @param text The text of the button
|
||||
*/
|
||||
public Button (String text) {
|
||||
super(text);
|
||||
setFont(new Font("Arial", Font.BOLD, 15));
|
||||
setBackground(new Color(96, 175, 255));
|
||||
}
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
* @param text The text of the button
|
||||
* @param color The background color of the button
|
||||
*/
|
||||
public Button (String text,Color color) {
|
||||
super(text);
|
||||
setFont(new Font("Arial", Font.BOLD, 15));
|
||||
setBackground(color);
|
||||
}
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
* @param text The text of the button
|
||||
* @param dimension The dimension of the button
|
||||
*/
|
||||
public Button(String text, Dimension dimension) {
|
||||
super(text);
|
||||
setPreferredSize(dimension);
|
||||
setFont(new Font("Arial", Font.BOLD, 20));
|
||||
setBackground(new Color(96, 175, 255));
|
||||
}
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
* @param text The text of the button
|
||||
* @param dimension The dimension of the button
|
||||
* @param font The font of the text in the button
|
||||
*/
|
||||
public Button(String text, Dimension dimension, Font font) {
|
||||
super(text);
|
||||
setPreferredSize(dimension);
|
||||
setFont(font);
|
||||
setBackground(new Color(96, 175, 255));
|
||||
}
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
* @param text The text of the button
|
||||
* @param dimension The dimension of the button
|
||||
* @param font The font of the text in the button
|
||||
* @param color The background color of the button
|
||||
*/
|
||||
public Button(String text, Dimension dimension, Font font, Color color) {
|
||||
super(text);
|
||||
setPreferredSize(dimension);
|
||||
setFont(font);
|
||||
setBackground(color);
|
||||
}
|
||||
|
||||
}
|
@ -1,28 +0,0 @@
|
||||
import java.awt.event.ActionEvent;
|
||||
import java.awt.event.ActionListener;
|
||||
|
||||
/**
|
||||
* La classe GridMakerCheckerListener est utilisée pour gérer les événements liés à la vérification de la grille.
|
||||
*/
|
||||
public class GridMakerCheckerListener implements ActionListener {
|
||||
|
||||
private GridMakerChecker gridMakerChecker;
|
||||
|
||||
/**
|
||||
* Constructeur de GridMakerCheckerListener.
|
||||
* @param gridMakerChecker L'instance de GridMakerChecker à utiliser.
|
||||
*/
|
||||
public GridMakerCheckerListener(GridMakerChecker gridMakerChecker) {
|
||||
this.gridMakerChecker = gridMakerChecker;
|
||||
}
|
||||
|
||||
/**
|
||||
* Méthode invoquée lorsqu'un bouton est cliqué.
|
||||
* Lance la vérification de la grille.
|
||||
* @param e L'événement d'action
|
||||
*/
|
||||
@Override
|
||||
public void actionPerformed(ActionEvent e) {
|
||||
gridMakerChecker.checkGrid();
|
||||
}
|
||||
}
|
@ -1,6 +1,6 @@
|
||||
public class Main{
|
||||
public class GridSolver{
|
||||
public static void main(String[] args) {
|
||||
Window fenetre = new Window(); // Création d'une fenêtre
|
||||
HomeView menu = new HomeView(fenetre); // Création du menu sur la fenêtre
|
||||
GSHomeView menu = new GSHomeView(fenetre); // Création du menu sur la fenêtre
|
||||
}
|
||||
}
|
@ -1,10 +0,0 @@
|
||||
|
||||
/**
|
||||
* Interface containing definition to showDialog box.
|
||||
* @version 1.0
|
||||
* @author Moncef STITI
|
||||
* @author Marco ORFAO
|
||||
*/
|
||||
public interface DialogManager {
|
||||
void showDialog();
|
||||
}
|
@ -1,47 +0,0 @@
|
||||
import javax.swing.*;
|
||||
|
||||
/**
|
||||
* It provides a button that toggles between playing and stopping music when clicked.
|
||||
* @version 1.0
|
||||
* @author Moncef STITI
|
||||
* @author Marco ORFAO
|
||||
*/
|
||||
public class MusicButton extends JButton {
|
||||
private static MusicPlayer currentMusicPlayer;
|
||||
private ImageIcon iconOn;
|
||||
private ImageIcon iconOff;
|
||||
private MusicPlayer musicPlayer;
|
||||
|
||||
/**
|
||||
* Constructs a MusicButton.
|
||||
* @param onIconPath The file path for the icon when music is on.
|
||||
* @param offIconPath The file path for the icon when music is off.
|
||||
* @param musicFilePath The file path for the music file to be played.
|
||||
*/
|
||||
public MusicButton(String onIconPath, String offIconPath, String musicFilePath) {
|
||||
|
||||
this.iconOn = new ImageIcon(onIconPath);
|
||||
this.iconOff = new ImageIcon(offIconPath);
|
||||
setIcon(this.iconOff);
|
||||
|
||||
// Vérifie s'il y a déjà une musique en cours de lecture et l'arrête si nécessaire
|
||||
if (currentMusicPlayer != null && currentMusicPlayer.isPlaying()) {
|
||||
currentMusicPlayer.stop();
|
||||
currentMusicPlayer = null;
|
||||
}
|
||||
|
||||
this.musicPlayer = new MusicPlayer(musicFilePath);
|
||||
|
||||
addActionListener(e -> {
|
||||
if (currentMusicPlayer != null && currentMusicPlayer.isPlaying()) {
|
||||
currentMusicPlayer.stop();
|
||||
currentMusicPlayer = null;
|
||||
setIcon(this.iconOff);
|
||||
} else {
|
||||
this.musicPlayer.play();
|
||||
setIcon(this.iconOn);
|
||||
currentMusicPlayer = this.musicPlayer;
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
@ -1,57 +0,0 @@
|
||||
import java.io.File;
|
||||
import javax.sound.sampled.*;
|
||||
|
||||
/**
|
||||
* Class containign a simple music player that allows playing and stopping music.
|
||||
* @version 1.0
|
||||
* @author Moncef STITI
|
||||
* @author Marco ORFAO
|
||||
*/
|
||||
|
||||
public class MusicPlayer {
|
||||
private Clip clip;
|
||||
private boolean isPlaying;
|
||||
|
||||
/**
|
||||
* Constructs a MusicPlayer with the specified file path.
|
||||
* @param filePath The path to the music file to be played.
|
||||
*/
|
||||
public MusicPlayer(String filePath) {
|
||||
try {
|
||||
File file = new File(filePath);
|
||||
AudioInputStream audioInputStream = AudioSystem.getAudioInputStream(file);
|
||||
this.clip = AudioSystem.getClip();
|
||||
this.clip.open(audioInputStream);
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Starts playing the music.
|
||||
*/
|
||||
public void play() {
|
||||
if (this.clip != null && !this.isPlaying) {
|
||||
this.clip.start();
|
||||
this.isPlaying = true;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Stops the music.
|
||||
*/
|
||||
public void stop() {
|
||||
if (this.clip != null && this.isPlaying) {
|
||||
this.clip.stop();
|
||||
this.isPlaying = false;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks if the music is currently playing.
|
||||
* @return true if the music is playing, false otherwise.
|
||||
*/
|
||||
public boolean isPlaying() {
|
||||
return this.isPlaying;
|
||||
}
|
||||
}
|
@ -1,20 +0,0 @@
|
||||
import javax.swing.JOptionPane;
|
||||
|
||||
/**
|
||||
* RulesDialogManager gère l'affichage de la boîte de dialogue des règles.
|
||||
* Cette classe implémente DialogManager pour définir la méthode showDialog.
|
||||
* @version 1.0
|
||||
* @author Moncef STITI
|
||||
* @author Marco ORFAO
|
||||
*/
|
||||
public class RulesDialogManager implements DialogManager {
|
||||
/**
|
||||
* Affiche la boîte de dialogue des règles du Sudoku.
|
||||
*/
|
||||
@Override
|
||||
public void showDialog() {
|
||||
RulesSudoku rulesPanel = new RulesSudoku(); // Création du panneau contenant les règles
|
||||
JOptionPane.showMessageDialog(null, rulesPanel, "Règles du Sudoku", JOptionPane.PLAIN_MESSAGE); // Affichage de la boîte de dialogue
|
||||
}
|
||||
}
|
||||
|
@ -1,49 +0,0 @@
|
||||
import javax.swing.*;
|
||||
import java.awt.*;
|
||||
|
||||
/**
|
||||
* RulesSudoku représente le panneau affichant les règles du Sudoku.
|
||||
* Cette classe étend JPanel et définit le contenu des règles.
|
||||
* @version 1.0
|
||||
* @author Moncef STITI
|
||||
* @author Marco ORFAO
|
||||
*/
|
||||
public class RulesSudoku extends JPanel {
|
||||
private Dimension FRAME_SIZE = new Dimension(400, 500); // Taille de la fenêtre des règles
|
||||
private Color BACKGROUND_COLOR = new Color(54, 91, 109); // Couleur d'arrière-plan du panneau
|
||||
|
||||
/**
|
||||
* Constructeur par défaut de RulesSudoku.
|
||||
* Initialise le contenu des règles et configure l'apparence du panneau.
|
||||
*/
|
||||
public RulesSudoku() {
|
||||
BorderLayout gestionnaireBorderLayout = new BorderLayout();
|
||||
this.setLayout(gestionnaireBorderLayout);
|
||||
this.setBackground(this.BACKGROUND_COLOR); // Couleur d'arrière-plan du panneau
|
||||
|
||||
JLabel titleLabel = new JLabel("Règles du Sudoku");
|
||||
titleLabel.setFont(new Font("Copperplate", Font.BOLD, 40)); // Police du titre
|
||||
titleLabel.setForeground(Color.WHITE); // Couleur du titre
|
||||
|
||||
JTextArea rulesTextArea = new JTextArea();
|
||||
rulesTextArea.setText("Les règles du Sudoku :\n\n" +
|
||||
"1. Le but du jeu est de remplir la grille avec une série de chiffres de 1 à 9 de telle sorte que chaque ligne, chaque colonne et chaque région de 3x3 contienne tous les chiffres de 1 à 9 sans répétition.\n\n" +
|
||||
"2. Certains chiffres sont déjà placés dans la grille au départ et ne peuvent pas être modifiés.\n\n" +
|
||||
"3. Utilisez la logique et le raisonnement pour remplir la grille avec les chiffres manquants.\n\n" +
|
||||
"4. Le jeu est terminé lorsqu'il n'y a plus de cases vides et que toutes les règles sont respectées.");
|
||||
rulesTextArea.setEditable(false);
|
||||
rulesTextArea.setLineWrap(true);
|
||||
rulesTextArea.setWrapStyleWord(true);
|
||||
rulesTextArea.setFont(new Font("Arial", Font.PLAIN, 20)); // Police du texte des règles
|
||||
rulesTextArea.setForeground(Color.WHITE); // Couleur du texte des règles
|
||||
rulesTextArea.setBackground(this.BACKGROUND_COLOR); // Couleur d'arrière-plan du texte des règles
|
||||
|
||||
JScrollPane scrollPane = new JScrollPane(rulesTextArea);
|
||||
|
||||
this.add(titleLabel, BorderLayout.NORTH);
|
||||
this.add(scrollPane, BorderLayout.CENTER);
|
||||
|
||||
this.setPreferredSize(this.FRAME_SIZE); // Taille de la fenêtre des règles
|
||||
}
|
||||
}
|
||||
|
@ -1,26 +0,0 @@
|
||||
import javax.swing.*;
|
||||
import java.awt.*;
|
||||
|
||||
/**
|
||||
* Title est une étiquette Swing personnalisée utilisée pour afficher un titre centré avec une police et une couleur spécifiées.
|
||||
* Cette classe étend JLabel.
|
||||
* @version 1.0
|
||||
* @author Moncef STITI
|
||||
* @author Marco ORFAO
|
||||
*/
|
||||
public class Title extends JLabel {
|
||||
|
||||
/**
|
||||
* Constructeur de Title.
|
||||
* Crée une étiquette avec le texte, la police et la couleur spécifiés, et la centre horizontalement.
|
||||
* @param text Le texte à afficher.
|
||||
* @param font La police à utiliser pour le texte.
|
||||
* @param color La couleur du texte.
|
||||
*/
|
||||
public Title(String text, Font font, Color color) {
|
||||
super(text, SwingConstants.CENTER); // Centre le texte horizontalement
|
||||
setFont(font); // Définit la police du texte
|
||||
setForeground(color); // Définit la couleur du texte
|
||||
}
|
||||
}
|
||||
|
@ -1,71 +0,0 @@
|
||||
import javax.swing.*;
|
||||
import java.awt.*;
|
||||
|
||||
/**
|
||||
* Window est une classe représentant la fenêtre principale de l'application Sudoku.
|
||||
* Cette classe étend JFrame et gère l'affichage des différentes pages de l'application.
|
||||
* @version 1.0
|
||||
* @author Moncef STITI
|
||||
* @author Marco ORFAO
|
||||
*/
|
||||
public class Window extends JFrame {
|
||||
/**
|
||||
* La taille minimale de la fenêtre.
|
||||
*/
|
||||
private static final Dimension MIN_WINDOW_SIZE = new Dimension(850, 700);
|
||||
/**
|
||||
* Le titre du programme.
|
||||
*/
|
||||
private static final String PROGRAM_TITLE = "Sudoku";
|
||||
|
||||
/**
|
||||
* La couleur d'arrière plan par défaut de la fenêtre
|
||||
*/
|
||||
private static final Color BACKGROUND_COLOR = new Color(54, 91, 109);
|
||||
|
||||
/**
|
||||
* Le titre de la page actuelle.
|
||||
*/
|
||||
private String PAGE_TITLE = "";
|
||||
|
||||
/**
|
||||
* Constructeur de la classe Window.
|
||||
* Initialise la fenêtre avec le titre du programme, la taille minimale et la couleur de fond.
|
||||
*/
|
||||
public Window() {
|
||||
super(PROGRAM_TITLE);
|
||||
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
|
||||
this.setMinimumSize(MIN_WINDOW_SIZE);
|
||||
this.setLocationRelativeTo(null);
|
||||
getContentPane().setBackground(BACKGROUND_COLOR);
|
||||
}
|
||||
|
||||
/**
|
||||
* Obtient le titre de la page actuelle.
|
||||
* @return Le titre de la page actuelle.
|
||||
*/
|
||||
public String getPageTitle() {
|
||||
return this.PAGE_TITLE;
|
||||
}
|
||||
|
||||
/**
|
||||
* Définit le titre de la page actuelle.
|
||||
* Met à jour le titre de la fenêtre pour inclure le titre de la page et le titre du programme.
|
||||
* @param title Le titre de la page actuelle.
|
||||
*/
|
||||
public void setPageTitle(String title) {
|
||||
this.PAGE_TITLE = title;
|
||||
this.setTitle(this.PAGE_TITLE + " - " + Window.PROGRAM_TITLE);
|
||||
}
|
||||
|
||||
/**
|
||||
* Supprime tous les composants de la fenêtre.
|
||||
* Utilisé pour effacer le contenu de la fenêtre.
|
||||
* @param window La fenêtre à nettoyer.
|
||||
*/
|
||||
public static void removeAllComponents(Window window) {
|
||||
window.getContentPane().removeAll(); // Supprime tous les composants de la fenêtre
|
||||
window.revalidate(); // Revalide la disposition des composants
|
||||
window.repaint(); // Redessine la fenêtre
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user