Création d'une seule et unique classe pour les menus principaux des deux programmes + Amélioration de la doc
This commit is contained in:
@@ -1,14 +1,16 @@
|
||||
import javax.swing.*;
|
||||
|
||||
/**
|
||||
* La classe GMChecker est utilisée pour vérifier la cohérence de la grille.
|
||||
* 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 GMChecker {
|
||||
|
||||
/**
|
||||
* La grille
|
||||
*/
|
||||
private GMGrid grid;
|
||||
|
||||
/**
|
||||
|
@@ -1,46 +0,0 @@
|
||||
import java.awt.event.ActionEvent;
|
||||
import java.awt.event.ActionListener;
|
||||
|
||||
/**
|
||||
* Listener for button clicks in the menu.
|
||||
* It performs different actions based on the button clicked.
|
||||
* @version 1.0
|
||||
* @author Moncef STITI
|
||||
* @author Marco ORFAO
|
||||
*/
|
||||
class GMHomeButtonClickListener implements ActionListener {
|
||||
private Window window;
|
||||
private DialogManager rulesDialogManager;
|
||||
|
||||
/**
|
||||
* Constructs a ButtonClickListener with the specified window.
|
||||
* @param window The window where the actions will be performed.
|
||||
*/
|
||||
public GMHomeButtonClickListener(Window window) {
|
||||
this.window = window;
|
||||
this.rulesDialogManager = new RulesDialogManager();
|
||||
}
|
||||
|
||||
/**
|
||||
* Performs an action based on the button clicked.
|
||||
* @param e The ActionEvent representing the button click.
|
||||
*/
|
||||
@Override
|
||||
public void actionPerformed(ActionEvent e) {
|
||||
String buttonText = ((Button) e.getSource()).getText();
|
||||
switch (buttonText) {
|
||||
case "Générer une grille":
|
||||
Window.removeAllComponents(this.window);
|
||||
GMUserInterfaceView vueCreationGrille = new GMUserInterfaceView(this.window); // Lancer le créateur de grille
|
||||
break;
|
||||
case "Règles":
|
||||
rulesDialogManager.showDialog(); // Afficher les règles
|
||||
break;
|
||||
case "Quitter":
|
||||
System.exit(0); // Quitter le programme
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
@@ -17,7 +17,7 @@ public class GSCase extends JPanel {
|
||||
|
||||
private String text = ""; // Texte affiché dans la case
|
||||
protected boolean isInitial = false; // Indique si la valeur de la case est initiale
|
||||
protected boolean isActive; // Indique si la case est active
|
||||
protected boolean isActive = true; // Indique si la case est active
|
||||
private JLabel label = new JLabel(); // Étiquette pour afficher le texte
|
||||
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
|
||||
|
@@ -1,48 +0,0 @@
|
||||
import java.awt.event.ActionEvent;
|
||||
import java.awt.event.ActionListener;
|
||||
|
||||
/**
|
||||
* Listener pour les clics sur les boutons dans le menu.
|
||||
* Il effectue différentes actions en fonction du bouton cliqué.
|
||||
* @version 1.0
|
||||
* @author Moncef STITI
|
||||
* @author Marco ORFAO
|
||||
*/
|
||||
class GSHomeButtonClickListener implements ActionListener {
|
||||
private Window window;
|
||||
private DialogManager rulesDialogManager;
|
||||
private GSMenu menuJeu;
|
||||
|
||||
/**
|
||||
* Construit un ButtonClickListener avec la fenêtre spécifiée.
|
||||
* @param window La fenêtre où les actions seront effectuées.
|
||||
*/
|
||||
public GSHomeButtonClickListener(Window window) {
|
||||
this.window = window;
|
||||
this.rulesDialogManager = new RulesDialogManager();
|
||||
}
|
||||
|
||||
/**
|
||||
* Effectue une action en fonction du bouton cliqué.
|
||||
* @param e L'ActionEvent représentant le clic sur le bouton.
|
||||
*/
|
||||
@Override
|
||||
public void actionPerformed(ActionEvent e) {
|
||||
String buttonText = ((Button) e.getSource()).getText();
|
||||
switch (buttonText) {
|
||||
case "Jouer":
|
||||
Window.removeAllComponents(this.window);
|
||||
this.menuJeu = new GSMenu(this.window);
|
||||
GSMenuController menuController = new GSMenuController(this.menuJeu, this.window);
|
||||
break;
|
||||
case "Règles":
|
||||
rulesDialogManager.showDialog(); // Afficher les règles
|
||||
break;
|
||||
case "Quitter":
|
||||
System.exit(0); // Quitter le programme
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
@@ -1,103 +0,0 @@
|
||||
import javax.swing.*;
|
||||
import java.awt.*;
|
||||
|
||||
/**
|
||||
* HomeView représente la vue de la page d'accueil de l'application Sudoku.
|
||||
* Cette classe étend JPanel et affiche les éléments de la page d'accueil, y compris le titre, les boutons et les contrôles audio.
|
||||
* Elle utilise également les classes Title, Button, et MusicButton.
|
||||
*
|
||||
* @version 1.0
|
||||
* @author Moncef STITI
|
||||
* @author Marco ORFAO
|
||||
*/
|
||||
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";
|
||||
private final String AUDIO_OFF = "img/iconeAudioMuted.png";
|
||||
private final String MUSIC_FILE = "audio/musiqueDeFond.wav";
|
||||
private final Dimension BUTTON_SIZE = new Dimension(300, 60);
|
||||
private final Color BACKGROUND_COLOR = new Color(54, 91, 109);
|
||||
private final Color TITLE_TEXT_COLOR = Color.WHITE;
|
||||
private final Font TITLE_FONT = new Font("Copperplate", Font.BOLD, 75);
|
||||
private final Font SUBTITLE_FONT = new Font("Copperplate", Font.PLAIN, 24);
|
||||
private final Font BUTTON_FONT = new Font("Copperplate", Font.BOLD, 24);
|
||||
private final String[] BUTTON_TEXTS = {"Jouer", "Règles", "Quitter"};
|
||||
|
||||
// Tableau de titres pour le titre principal et le sous-titre
|
||||
private final Title[] labels = {
|
||||
new Title("Sudoku Game", TITLE_FONT, TITLE_TEXT_COLOR),
|
||||
new Title("Par Moncef & Marco", SUBTITLE_FONT, TITLE_TEXT_COLOR)
|
||||
};
|
||||
|
||||
private MusicButton musicButton; // Bouton pour contrôler la musique
|
||||
private final Window window; // Fenêtre parente
|
||||
private JPanel titlePanel; // Panneau pour le titre
|
||||
private JPanel buttonPanel; // Panneau pour les boutons
|
||||
private JLabel imageLabel; // Étiquette pour l'image
|
||||
|
||||
/**
|
||||
* Constructeur de la classe HomeView.
|
||||
* Initialise la fenêtre parente et crée les composants de la page d'accueil.
|
||||
* @param window La fenêtre parente.
|
||||
*/
|
||||
public GSHomeView(Window window) {
|
||||
this.window = window;
|
||||
createComponents();
|
||||
addComponentsToWindow();
|
||||
}
|
||||
|
||||
/**
|
||||
* Crée les composants de la page d'accueil, y compris les panneaux de titre et de boutons.
|
||||
*/
|
||||
private void createComponents() {
|
||||
titlePanel = new JPanel();
|
||||
buttonPanel = new JPanel();
|
||||
ImageIcon iconeSudoku = new ImageIcon("img/sudoku.png");
|
||||
imageLabel = new JLabel(iconeSudoku);
|
||||
|
||||
// Configuration du panneau de titre
|
||||
GridLayout titleLayout = new GridLayout(2, 1);
|
||||
titlePanel.setLayout(titleLayout);
|
||||
titlePanel.setBackground(BACKGROUND_COLOR);
|
||||
// Utilisation de la classe Title pour le titre et le sous-titre
|
||||
for (Title label : labels) {
|
||||
titlePanel.add(label);
|
||||
}
|
||||
|
||||
// Configuration du panneau de boutons
|
||||
GridLayout buttonLayout = new GridLayout(BUTTON_TEXTS.length, 1, 0, 10);
|
||||
buttonPanel.setLayout(buttonLayout);
|
||||
buttonPanel.setBorder(BorderFactory.createEmptyBorder(20, 20, 20, 20));
|
||||
buttonPanel.setBackground(BACKGROUND_COLOR);
|
||||
GSHomeButtonClickListener listenerButton = new GSHomeButtonClickListener(window);
|
||||
for (String text : BUTTON_TEXTS) {
|
||||
Button button = new Button(text, BUTTON_SIZE, BUTTON_FONT, Color.white);
|
||||
button.addActionListener(listenerButton);
|
||||
buttonPanel.add(button);
|
||||
}
|
||||
|
||||
musicButton = new MusicButton(AUDIO_ON, AUDIO_OFF, MUSIC_FILE); // Bouton pour contrôler la musique
|
||||
}
|
||||
|
||||
/**
|
||||
* Ajoute les composants créés à la fenêtre parente.
|
||||
*/
|
||||
public void addComponentsToWindow() {
|
||||
BorderLayout layout = new BorderLayout();
|
||||
window.getContentPane().setLayout(layout);
|
||||
window.add(titlePanel, BorderLayout.NORTH);
|
||||
window.add(buttonPanel, BorderLayout.WEST);
|
||||
window.add(imageLabel, BorderLayout.EAST);
|
||||
window.setPageTitle("Menu principal"); // Définit le titre de la page dans la fenêtre
|
||||
|
||||
FlowLayout controlPanelLayout = new FlowLayout(FlowLayout.RIGHT);
|
||||
JPanel controlPanel = new JPanel(controlPanelLayout); // Panneau pour les contrôles audio
|
||||
controlPanel.setBackground(BACKGROUND_COLOR);
|
||||
controlPanel.add(musicButton); // Ajoute le bouton de contrôle audio
|
||||
window.add(controlPanel, BorderLayout.SOUTH); // Ajoute le panneau de contrôles à la fenêtre
|
||||
|
||||
window.pack(); // Ajuste la taille de la fenêtre pour s'adapter à son contenu
|
||||
window.setVisible(true); // Rend la fenêtre visible
|
||||
}
|
||||
}
|
@@ -9,10 +9,25 @@ import java.io.*;
|
||||
* @author Marco ORFAO
|
||||
*/
|
||||
public class GSImport {
|
||||
|
||||
|
||||
/**
|
||||
* Fenêtre précédente
|
||||
*/
|
||||
private Window previousFrame;
|
||||
|
||||
/**
|
||||
* Indique si le fichier est accessible
|
||||
*/
|
||||
private boolean accessible;
|
||||
|
||||
/**
|
||||
* Fichier sélectionné pour l'importation
|
||||
*/
|
||||
private File file;
|
||||
|
||||
/**
|
||||
* Tableau des valeurs importées
|
||||
*/
|
||||
private int[] importedValues = new int[9];
|
||||
|
||||
/**
|
||||
@@ -69,14 +84,17 @@ public class GSImport {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Permet de savoir si le fichier est accessible
|
||||
* @return le booleen accessible
|
||||
*/
|
||||
public boolean isAccessible() {
|
||||
return accessible;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the array of imported values.
|
||||
* @return the array of imported values
|
||||
* Récupère le tableau des valeurs importées.
|
||||
* @return le tableau des valeurs importées
|
||||
*/
|
||||
public int[] getImportedValues() {
|
||||
return importedValues;
|
||||
|
@@ -8,14 +8,40 @@ import java.awt.*;
|
||||
* @author Marco ORFAO
|
||||
*/
|
||||
public class GSMenu {
|
||||
/**
|
||||
* Fenêtre dans laquelle le menu est affiché
|
||||
*/
|
||||
private Window window;
|
||||
|
||||
private Window window; // Fenêtre dans laquelle le menu est affiché
|
||||
private JPanel titlePanel; // Panneau pour le titre
|
||||
private JPanel buttonPanel; // Panneau pour les boutons
|
||||
private Title titleLabel; // Étiquette pour le titre
|
||||
private Button importerButton; // Bouton pour importer une grille
|
||||
private Button jouerButton; // Bouton pour commencer à jouer
|
||||
private Button autoSolveButton; // Bouton pour résoudre automatiquement la grille
|
||||
/**
|
||||
* Panneau pour le titre
|
||||
*/
|
||||
private JPanel titlePanel;
|
||||
|
||||
/**
|
||||
* Panneau pour les boutons
|
||||
*/
|
||||
private JPanel buttonPanel;
|
||||
|
||||
/**
|
||||
* Étiquette pour le titre
|
||||
*/
|
||||
private Title titleLabel;
|
||||
|
||||
/**
|
||||
* Bouton pour importer une grille
|
||||
*/
|
||||
private Button importerButton;
|
||||
|
||||
/**
|
||||
* Bouton pour commencer à jouer
|
||||
*/
|
||||
private Button jouerButton;
|
||||
|
||||
/**
|
||||
* Bouton pour résoudre automatiquement la grille
|
||||
*/
|
||||
private Button autoSolveButton;
|
||||
|
||||
/**
|
||||
* Constructeur de la classe GSMenu.
|
||||
@@ -73,15 +99,26 @@ public class GSMenu {
|
||||
this.autoSolveButton.setEnabled(true); // Active le bouton "Résolution automatique"
|
||||
}
|
||||
|
||||
// Méthodes getters pour les composants
|
||||
/**
|
||||
* Renvoie le bouton pour l'importation.
|
||||
* @return Le bouton pour l'importation.
|
||||
*/
|
||||
public Button getImporterButton() {
|
||||
return this.importerButton;
|
||||
}
|
||||
|
||||
/**
|
||||
* Renvoie le bouton pour démarrer le jeu.
|
||||
* @return Le bouton pour démarrer le jeu.
|
||||
*/
|
||||
public Button getJouerButton() {
|
||||
return this.jouerButton;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Renvoie le bouton pour résoudre automatiquement la grille.
|
||||
* @return Le bouton pour résoudre automatiquement la grille.
|
||||
*/
|
||||
public Button getAutoSolveButton() {
|
||||
return this.autoSolveButton;
|
||||
}
|
||||
|
@@ -8,9 +8,20 @@ import java.awt.event.ActionListener;
|
||||
* @author Marco ORFAO
|
||||
*/
|
||||
public class GSMenuController implements ActionListener {
|
||||
private GSMenu gsMenu; // Menu Sudoku
|
||||
private Window mainWindow; // Fenêtre principale
|
||||
private GSGrid sudokuGrid; // Grille de Sudoku
|
||||
/**
|
||||
* Menu Sudoku
|
||||
*/
|
||||
private GSMenu gsMenu;
|
||||
|
||||
/**
|
||||
* Fenêtre principale
|
||||
*/
|
||||
private Window mainWindow;
|
||||
|
||||
/**
|
||||
* Grille de Sudoku
|
||||
*/
|
||||
private GSGrid sudokuGrid;
|
||||
|
||||
/**
|
||||
* Constructeur de la classe GSMenuController.
|
||||
|
@@ -9,26 +9,61 @@ import java.awt.event.*;
|
||||
*/
|
||||
public class GSPlay {
|
||||
|
||||
// Valeur représentant une case vide
|
||||
/**
|
||||
* Valeur représentant une case vide
|
||||
*/
|
||||
private static final int EMPTY_VALUE = 0;
|
||||
|
||||
// Codes des touches numériques du pavé numérique
|
||||
/**
|
||||
* Codes des touches numériques du pavé numérique
|
||||
*/
|
||||
private static final int[] NUM_KEYS = {KeyEvent.VK_NUMPAD1, KeyEvent.VK_NUMPAD2, KeyEvent.VK_NUMPAD3, KeyEvent.VK_NUMPAD4, KeyEvent.VK_NUMPAD5,
|
||||
KeyEvent.VK_NUMPAD6, KeyEvent.VK_NUMPAD7, KeyEvent.VK_NUMPAD8, KeyEvent.VK_NUMPAD9};
|
||||
|
||||
// Codes des touches numériques du clavier
|
||||
/**
|
||||
* Codes des touches numériques du clavier
|
||||
*/
|
||||
private static final int[] KEY_NUMBERS = {KeyEvent.VK_1, KeyEvent.VK_2, KeyEvent.VK_3, KeyEvent.VK_4, KeyEvent.VK_5,
|
||||
KeyEvent.VK_6, KeyEvent.VK_7, KeyEvent.VK_8, KeyEvent.VK_9};
|
||||
|
||||
// Code de la touche de suppression
|
||||
/**
|
||||
* Code de la touche de suppression
|
||||
*/
|
||||
private static final int DELETE_KEY = KeyEvent.VK_BACK_SPACE;
|
||||
|
||||
/**
|
||||
* Container pour le contenu de la fenêtre
|
||||
*/
|
||||
private Container content;
|
||||
|
||||
/**
|
||||
* Grille de Sudoku
|
||||
*/
|
||||
private GSGrid ma_Grille;
|
||||
private Button boutonValider = new Button("Valider",Color.lightGray);
|
||||
|
||||
/**
|
||||
* Bouton "Valider" pour valider la grille
|
||||
*/
|
||||
private Button boutonValider;
|
||||
|
||||
/**
|
||||
* Temps de démarrage du jeu
|
||||
*/
|
||||
private long startTime;
|
||||
|
||||
/**
|
||||
* Temps écoulé depuis le démarrage du jeu
|
||||
*/
|
||||
private long vraiTime;
|
||||
|
||||
/**
|
||||
* Fenêtre de jeu
|
||||
*/
|
||||
private Window gameplay;
|
||||
|
||||
/**
|
||||
* Contrôleur pour gérer les événements de jeu
|
||||
*/
|
||||
private GSPlayController gsPlayController;
|
||||
|
||||
/**
|
||||
@@ -40,6 +75,7 @@ public class GSPlay {
|
||||
this.ma_Grille = grille;
|
||||
this.gameplay = window;
|
||||
this.gsPlayController = new GSPlayController(this);
|
||||
this.boutonValider = new Button("Valider",Color.lightGray);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -98,7 +134,7 @@ public class GSPlay {
|
||||
}
|
||||
|
||||
/**
|
||||
* Méthode pour obtenir la grille
|
||||
* Méthode pour obtenir la grille jouer
|
||||
* @return la grille
|
||||
*/
|
||||
public GSGrid getMaGrille() {
|
||||
|
@@ -10,6 +10,9 @@ import java.awt.event.KeyListener;
|
||||
* @author Marco ORFAO
|
||||
*/
|
||||
public class GSPlayController implements KeyListener, ActionListener {
|
||||
/**
|
||||
* Le jeu de la grille
|
||||
*/
|
||||
private GSPlay gsPlay;
|
||||
|
||||
/**
|
||||
@@ -56,6 +59,7 @@ public class GSPlayController implements KeyListener, ActionListener {
|
||||
*/
|
||||
@Override
|
||||
public void keyReleased(KeyEvent e) {
|
||||
// Non utilisé
|
||||
}
|
||||
|
||||
/**
|
||||
|
@@ -8,11 +8,25 @@ import java.awt.*;
|
||||
* @author Marco ORFAO
|
||||
*/
|
||||
public class GSSolver {
|
||||
/**
|
||||
* Grille de Sudoku à résoudre
|
||||
*/
|
||||
private GSGrid grid;
|
||||
|
||||
private GSGrid grid; // Grille de Sudoku à résoudre
|
||||
private Window window; // Fenêtre dans laquelle afficher la résolution
|
||||
private JLabel label = new JLabel("Resolution en cours..."); // Étiquette pour afficher le statut de la résolution
|
||||
private long startTime; // Temps de début de la résolution
|
||||
/**
|
||||
* Fenêtre dans laquelle afficher la résolution
|
||||
*/
|
||||
private Window window;
|
||||
|
||||
/**
|
||||
* Étiquette pour afficher le statut de la résolution
|
||||
*/
|
||||
private JLabel label = new JLabel("Resolution en cours...");
|
||||
|
||||
/**
|
||||
* Temps de début de la résolution
|
||||
*/
|
||||
private long startTime;
|
||||
|
||||
/**
|
||||
* Constructeur de la classe GSSolver.
|
||||
|
@@ -5,8 +5,10 @@
|
||||
* @author Marco ORFAO
|
||||
*/
|
||||
public class GSTest {
|
||||
|
||||
private GSGrid ma_Grille;
|
||||
/**
|
||||
* La grille
|
||||
*/
|
||||
private GSGrid ma_Grille;
|
||||
|
||||
/**
|
||||
* Constructeur de la classe GSTest.
|
||||
|
@@ -1,12 +1,14 @@
|
||||
/**
|
||||
* La classe GSWin gère l'affichage d'une fenêtre de félicitations pour avoir résolu le Sudoku.
|
||||
* GSWin gère l'affichage d'une fenêtre de félicitations pour avoir résolu le Sudoku.
|
||||
* @version 1.0
|
||||
* @author Moncef STITI
|
||||
* @author Marco ORFAO
|
||||
*/
|
||||
public class GSWin implements DialogManager {
|
||||
|
||||
private long solvingTime; // Temps de résolution du Sudoku
|
||||
/**
|
||||
* Temps de résolution du Sudoku
|
||||
*/
|
||||
private long solvingTime;
|
||||
|
||||
/**
|
||||
* Constructeur de la classe GSWin.
|
||||
|
@@ -1,6 +1,7 @@
|
||||
public class GridMaker{
|
||||
public static void main(String[] args) {
|
||||
Window fenetre = new Window(); // Création d'une fenêtre
|
||||
GMHomeView menu = new GMHomeView(fenetre); // Création du menu sur la fenêtre
|
||||
String[] gmButtonTexts = {"Générer une grille", "Règles", "Quitter"}; // Texte des boutons pour le menu du GridMaker
|
||||
HomeView gmHomeView = new HomeView(fenetre, "Sudoku Grid Creator", "Par Moncef & Marco", gmButtonTexts);
|
||||
}
|
||||
}
|
@@ -1,6 +1,7 @@
|
||||
public class GridSolver{
|
||||
public static void main(String[] args) {
|
||||
Window fenetre = new Window(); // Création d'une fenêtre
|
||||
GSHomeView menu = new GSHomeView(fenetre); // Création du menu sur la fenêtre
|
||||
String[] gsButtonTexts = {"Jouer", "Règles", "Quitter"}; // Texte des boutons pour le menu du GridSolver
|
||||
HomeView gsHomeView = new HomeView(fenetre, "Sudoku Game", "Par Moncef & Marco", gsButtonTexts);
|
||||
}
|
||||
}
|
53
src/HomeButtonClickListener.java
Normal file
53
src/HomeButtonClickListener.java
Normal file
@@ -0,0 +1,53 @@
|
||||
import java.awt.event.ActionEvent;
|
||||
import java.awt.event.ActionListener;
|
||||
|
||||
/**
|
||||
* Listener pour les clics sur les boutons dans le menu.
|
||||
* Il effectue différentes actions en fonction du bouton cliqué.
|
||||
* @version 1.0
|
||||
* @author Moncef STITI
|
||||
* @author Marco ORFAO
|
||||
*/
|
||||
public class HomeButtonClickListener implements ActionListener {
|
||||
/**
|
||||
* La fenêtre
|
||||
*/
|
||||
private Window window;
|
||||
|
||||
/**
|
||||
* Construit un ButtonClickListener avec la fenêtre spécifiée.
|
||||
* @param window La fenêtre où les actions seront effectuées.
|
||||
*/
|
||||
public HomeButtonClickListener(Window window) {
|
||||
this.window = window;
|
||||
}
|
||||
|
||||
/**
|
||||
* Effectue une action en fonction du bouton cliqué.
|
||||
* @param e L'ActionEvent représentant le clic sur le bouton.
|
||||
*/
|
||||
@Override
|
||||
public void actionPerformed(ActionEvent e) {
|
||||
String buttonText = ((Button) e.getSource()).getText();
|
||||
switch (buttonText) {
|
||||
case "Jouer":
|
||||
Window.removeAllComponents(this.window);
|
||||
GSMenu menuJeu = new GSMenu(this.window);
|
||||
GSMenuController menuController = new GSMenuController(menuJeu, this.window);
|
||||
break;
|
||||
case "Générer une grille":
|
||||
Window.removeAllComponents(this.window);
|
||||
GMUserInterfaceView vueCreationGrille = new GMUserInterfaceView(this.window);
|
||||
break;
|
||||
case "Règles":
|
||||
DialogManager rulesDialogManager = new RulesDialogManager();
|
||||
rulesDialogManager.showDialog(); // Afficher les règles
|
||||
break;
|
||||
case "Quitter":
|
||||
System.exit(0); // Quitter le programme
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
@@ -1,5 +1,7 @@
|
||||
import javax.swing.*;
|
||||
import java.awt.*;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* HomeView représente la vue de la page d'accueil de l'application Sudoku.
|
||||
@@ -10,7 +12,7 @@ import java.awt.*;
|
||||
* @author Moncef STITI
|
||||
* @author Marco ORFAO
|
||||
*/
|
||||
public class GMHomeView 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
|
||||
private final String AUDIO_ON = "img/iconeAudio.png";
|
||||
@@ -22,27 +24,31 @@ public class GMHomeView extends JPanel {
|
||||
private final Font TITLE_FONT = new Font("Copperplate", Font.BOLD, 75);
|
||||
private final Font SUBTITLE_FONT = new Font("Copperplate", Font.PLAIN, 24);
|
||||
private final Font BUTTON_FONT = new Font("Copperplate", Font.BOLD, 24);
|
||||
private final String[] BUTTON_TEXTS = {"Générer une grille", "Règles", "Quitter"};
|
||||
|
||||
// Tableau de titres pour le titre principal et le sous-titre
|
||||
private final Title[] labels = {
|
||||
new Title("Sudoku Grid Creator", TITLE_FONT, TITLE_TEXT_COLOR),
|
||||
new Title("Par Moncef & Marco", SUBTITLE_FONT, TITLE_TEXT_COLOR)
|
||||
};
|
||||
|
||||
private final String[] BUTTON_TEXTS; // Textes des boutons
|
||||
private final Title[] labels; // Tableau de titres pour le titre principal et le sous-titre
|
||||
private MusicButton musicButton; // Bouton pour contrôler la musique
|
||||
private final Window window; // Fenêtre parente
|
||||
private JPanel titlePanel; // Panneau pour le titre
|
||||
private JPanel buttonPanel; // Panneau pour les boutons
|
||||
private JLabel imageLabel; // Étiquette pour l'image
|
||||
private List<Button> buttonsList; // Liste des boutons créés
|
||||
|
||||
/**
|
||||
* Constructeur de la classe HomeView.
|
||||
* 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 subTitle Le sous-titre de la page.
|
||||
* @param buttonTexts Les textes des boutons.
|
||||
*/
|
||||
public GMHomeView(Window window) {
|
||||
public HomeView(Window window, String mainTitle, String subTitle, String[] buttonTexts) {
|
||||
this.window = window;
|
||||
this.BUTTON_TEXTS = buttonTexts;
|
||||
this.labels = new Title[]{new Title(mainTitle, TITLE_FONT, TITLE_TEXT_COLOR),
|
||||
new Title(subTitle, SUBTITLE_FONT, TITLE_TEXT_COLOR)};
|
||||
buttonsList = new ArrayList<>();
|
||||
createComponents();
|
||||
addComponentsToWindow();
|
||||
}
|
||||
@@ -70,11 +76,12 @@ public class GMHomeView extends JPanel {
|
||||
buttonPanel.setLayout(buttonLayout);
|
||||
buttonPanel.setBorder(BorderFactory.createEmptyBorder(20, 20, 20, 20));
|
||||
buttonPanel.setBackground(BACKGROUND_COLOR);
|
||||
GMHomeButtonClickListener listenerButton = new GMHomeButtonClickListener(window);
|
||||
HomeButtonClickListener listenerButton = new HomeButtonClickListener(window);
|
||||
for (String text : BUTTON_TEXTS) {
|
||||
Button button = new Button(text, BUTTON_SIZE, BUTTON_FONT, Color.white);
|
||||
button.addActionListener(listenerButton);
|
||||
buttonPanel.add(button);
|
||||
buttonsList.add(button); // Ajout du bouton à la liste
|
||||
}
|
||||
|
||||
musicButton = new MusicButton(AUDIO_ON, AUDIO_OFF, MUSIC_FILE); // Bouton pour contrôler la musique
|
||||
@@ -100,4 +107,31 @@ public class GMHomeView extends JPanel {
|
||||
window.pack(); // Ajuste la taille de la fenêtre pour s'adapter à son contenu
|
||||
window.setVisible(true); // Rend la fenêtre visible
|
||||
}
|
||||
|
||||
/**
|
||||
* Récupère le premier bouton créé.
|
||||
*
|
||||
* @return Le premier bouton.
|
||||
*/
|
||||
public Button getFirstButton() {
|
||||
return buttonsList.get(0);
|
||||
}
|
||||
|
||||
/**
|
||||
* Récupère le deuxième bouton créé.
|
||||
*
|
||||
* @return Le deuxième bouton.
|
||||
*/
|
||||
public Button getSecondButton() {
|
||||
return buttonsList.get(1);
|
||||
}
|
||||
|
||||
/**
|
||||
* Récupère le troisième bouton créé.
|
||||
*
|
||||
* @return Le troisième bouton.
|
||||
*/
|
||||
public Button getThirdButton() {
|
||||
return buttonsList.get(2);
|
||||
}
|
||||
}
|
@@ -7,11 +7,27 @@ import javax.swing.*;
|
||||
* @author Marco ORFAO
|
||||
*/
|
||||
public class MusicButton extends JButton {
|
||||
private static MusicPlayer currentMusicPlayer;
|
||||
/**
|
||||
* Représente le lecteur de musique actuellement en cours de lecture.
|
||||
*/
|
||||
private static MusicPlayer currentMusicPlayer;
|
||||
|
||||
/**
|
||||
* L'icône à afficher lorsque la musique est activée.
|
||||
*/
|
||||
private ImageIcon iconOn;
|
||||
|
||||
/**
|
||||
* L'icône à afficher lorsque la musique est désactivée.
|
||||
*/
|
||||
private ImageIcon iconOff;
|
||||
|
||||
/**
|
||||
* Le lecteur de musique associé à ce bouton.
|
||||
*/
|
||||
private MusicPlayer musicPlayer;
|
||||
|
||||
|
||||
/**
|
||||
* Constructeur : Construit un MusicButton.
|
||||
* @param onIconPath Le chemin du fichier d'icône lorsque la musique est activée.
|
||||
@@ -32,7 +48,7 @@ public class MusicButton extends JButton {
|
||||
|
||||
this.musicPlayer = new MusicPlayer(musicFilePath);
|
||||
|
||||
addActionListener(e -> {
|
||||
this.addActionListener(e -> {
|
||||
if (currentMusicPlayer != null && currentMusicPlayer.isPlaying()) {
|
||||
currentMusicPlayer.stop();
|
||||
currentMusicPlayer = null;
|
||||
|
@@ -9,7 +9,13 @@ import javax.sound.sampled.*;
|
||||
*/
|
||||
|
||||
public class MusicPlayer {
|
||||
/**
|
||||
* Clip utilisé pour jouer la musique
|
||||
*/
|
||||
private Clip clip;
|
||||
/**
|
||||
* Indique si la musique est en cours de lecture ou non
|
||||
*/
|
||||
private boolean isPlaying;
|
||||
|
||||
/**
|
||||
|
@@ -9,8 +9,14 @@ import java.awt.*;
|
||||
* @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
|
||||
/**
|
||||
* Taille de la fenêtre des règles
|
||||
*/
|
||||
private Dimension FRAME_SIZE = new Dimension(400, 500);
|
||||
/**
|
||||
* Couleur d'arrière-plan du panneau
|
||||
*/
|
||||
private Color BACKGROUND_COLOR = new Color(54, 91, 109);
|
||||
|
||||
/**
|
||||
* Constructeur par défaut de RulesSudoku.
|
||||
@@ -21,9 +27,7 @@ public class RulesSudoku extends JPanel {
|
||||
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
|
||||
Title titleLabel = new Title("Règles du Sudoku",new Font("Copperplate", Font.BOLD, 40),Color.WHITE);
|
||||
|
||||
JTextArea rulesTextArea = new JTextArea();
|
||||
rulesTextArea.setText("Les règles du Sudoku :\n\n" +
|
||||
|
@@ -30,7 +30,7 @@ public class Window extends JFrame {
|
||||
|
||||
/**
|
||||
* Constructeur de la classe Window.
|
||||
* Initialise la fenêtre avec le titre du programme, la taille minimale et la couleur de fond.
|
||||
* Initialise la fenêtre avec la taille minimale et la couleur de fond.
|
||||
*/
|
||||
public Window() {
|
||||
super(PROGRAM_TITLE);
|
||||
@@ -40,14 +40,6 @@ public class Window extends JFrame {
|
||||
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.
|
||||
|
Reference in New Issue
Block a user