Séparation des programmes

This commit is contained in:
Moncef STITI 2024-04-29 16:26:16 +02:00
parent e11400fbd0
commit 064ba1a91f
50 changed files with 113 additions and 472 deletions

View File

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

View File

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

View File

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

View File

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

View 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();
}
}

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -1,10 +0,0 @@
/**
* Interface containing definition to showDialog box.
* @version 1.0
* @author Moncef STITI
* @author Marco ORFAO
*/
public interface DialogManager {
void showDialog();
}

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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