diff --git a/app/src/main/java/sudoku/App.java b/app/src/main/java/sudoku/App.java index b301bf5..96467f2 100644 --- a/app/src/main/java/sudoku/App.java +++ b/app/src/main/java/sudoku/App.java @@ -3,20 +3,25 @@ package sudoku; import java.util.logging.Level; import java.util.logging.Logger; +/** + * Classe principale de l'application sudoku. + */ public class App { private static final Logger logger = Logger.getLogger(App.class.getName()); - public String getGreeting() { - return "Hello World!"; + /** + * Constructeur privé pour empêcher l'instanciation de la classe App. + */ + private App() { } /** - * Méthode main permettant de lancer l'application sudoku et d'afficher les erreurs s'il y en a. + * Méthode main permettant de lancer l'application sudoku et d'afficher les + * erreurs s'il y en a. + * * @param args : arguments passés en paramètre */ public static void main(String[] args) { - System.out.println(new App().getGreeting()); - try { Sudoku.menu(); } catch (Exception e) { diff --git a/app/src/main/java/sudoku/Bloc.java b/app/src/main/java/sudoku/Bloc.java index b643a1a..072287f 100644 --- a/app/src/main/java/sudoku/Bloc.java +++ b/app/src/main/java/sudoku/Bloc.java @@ -2,6 +2,10 @@ package sudoku; import java.util.ArrayList; import java.util.List; + +/** + * Classe permettant de créer un bloc de couleur. + */ public class Bloc { private final List cases; private final String couleur; @@ -9,7 +13,8 @@ public class Bloc { /** * Constructeur permettant de créer un bloc de couleur - * @param couleur : couleur du bloc + * + * @param couleur : couleur du bloc * @param couleurIndex : index de la couleur */ public Bloc(String couleur, int couleurIndex) { @@ -20,6 +25,7 @@ public class Bloc { /** * Méthode permettant d'ajouter une case à un bloc + * * @param c : case à ajouter */ public void ajouterCase(Case c) { @@ -28,6 +34,7 @@ public class Bloc { /** * Méthode permettant de renvoyer la couleur d'un bloc + * * @return couleur du bloc */ public String getCouleur() { @@ -36,6 +43,7 @@ public class Bloc { /** * Méthode permettant de renvoyer une liste de cases associée à un bloc + * * @return liste de cases */ public List getCases() { @@ -44,6 +52,7 @@ public class Bloc { /** * Méthode permettant d'afficher un bloc complet avec les cases qui le composent + * * @return bloc complet avec les cases, la couleur et l'index de la couleur */ @Override diff --git a/app/src/main/java/sudoku/Case.java b/app/src/main/java/sudoku/Case.java index 823d8f4..e265b54 100644 --- a/app/src/main/java/sudoku/Case.java +++ b/app/src/main/java/sudoku/Case.java @@ -1,5 +1,8 @@ package sudoku; +/** + * Classe permettant de créer une case. + */ public class Case { private final int ligne; private final int colonne; @@ -7,7 +10,8 @@ public class Case { /** * Constructeur permettant de créer une case grace aux paramètres suivants : - * @param ligne : coordonnée de la ligne + * + * @param ligne : coordonnée de la ligne * @param colonne : coordonnée de la colonne * @param symbole : symbole de la case */ @@ -19,6 +23,7 @@ public class Case { /** * Méthode permettant de renvoyer la coordonnée de la ligne qui compose la case + * * @return ligne */ public int getLigne() { @@ -26,7 +31,9 @@ public class Case { } /** - * Méthode permettant de renvoyer la coordonnée de la colonne qui compose la case + * Méthode permettant de renvoyer la coordonnée de la colonne qui compose la + * case + * * @return colonne */ public int getColonne() { @@ -35,6 +42,7 @@ public class Case { /** * Méthode permettant de renvoyer le symbole qui compose la case + * * @return symbole */ public Symbole getSymbole() { @@ -43,6 +51,7 @@ public class Case { /** * Méthode permettant de modifier le symbole qui compose la case + * * @param symbole : symbole de la case */ public void setSymbole(Symbole symbole) { @@ -50,7 +59,9 @@ public class Case { } /** - * Méthode qui permet d'afficher le symbole de la case ou "-" si la case est vide + * Méthode qui permet d'afficher le symbole de la case ou "-" si la case est + * vide + * * @return symbole de la case */ @Override diff --git a/app/src/main/java/sudoku/Contrainte.java b/app/src/main/java/sudoku/Contrainte.java index ba94908..3b94beb 100644 --- a/app/src/main/java/sudoku/Contrainte.java +++ b/app/src/main/java/sudoku/Contrainte.java @@ -1,8 +1,17 @@ package sudoku; /** - * Interface permettant d'évaluer toutes les contraintes et de retourner un boolean indiquant si elles ont étés respectées. + * Interface permettant d'évaluer toutes les contraintes et de retourner un + * boolean indiquant si elles ont étés respectées. */ public interface Contrainte { + /** + * Méthode permettant de savoir si l'ensemble des contraintes concernant une + * case sont respectées. + * + * @param grille : Grille + * @param c : Case + * @return boolean : true si toutes les contraintes sont respectées, false sinon + */ boolean estRespectee(Grille grille, Case c); } diff --git a/app/src/main/java/sudoku/ContrainteBloc.java b/app/src/main/java/sudoku/ContrainteBloc.java index 898add3..2ed8561 100644 --- a/app/src/main/java/sudoku/ContrainteBloc.java +++ b/app/src/main/java/sudoku/ContrainteBloc.java @@ -1,11 +1,17 @@ package sudoku; +/** + * Implémentation de l'interface Contrainte sur les blocs. + * Cette classe permet de vérifier si les contraintes sur les blocs sont + * respectées. + */ public class ContrainteBloc implements Contrainte { private final int blocRows; private final int blocCols; /** * Constructeur permettant de créer une contrainte de bloc + * * @param blocRows : nombre de lignes du bloc * @param blocCols : nombre de colonnes du bloc */ @@ -15,9 +21,11 @@ public class ContrainteBloc implements Contrainte { } /** - * Méthode permettant de savoir pour une case donnée si l'ensemble des contraintes concernant le bloc sont respectées.
+ * Méthode permettant de savoir pour une case donnée si l'ensemble des + * contraintes concernant le bloc sont respectées.
+ * * @param grille : Grille - * @param c : Case + * @param c : Case * @return boolean : true si toutes les contraintes sont respectées, false sinon */ @Override diff --git a/app/src/main/java/sudoku/ContrainteColonne.java b/app/src/main/java/sudoku/ContrainteColonne.java index 145fc83..87f714e 100644 --- a/app/src/main/java/sudoku/ContrainteColonne.java +++ b/app/src/main/java/sudoku/ContrainteColonne.java @@ -1,10 +1,24 @@ package sudoku; +/** + * Implémentation de l'interface Contrainte sur les colonnes. + * Cette classe permet de vérifier si les contraintes sur les colonnes sont + * respectées. + */ public class ContrainteColonne implements Contrainte { + /** - * Méthode permettant de savoir pour une case donnée si l'ensemble des contraintes concernant la colonne sont respectées.
+ * Constructeur de la classe ContrainteColonne + */ + public ContrainteColonne() { + } + + /** + * Méthode permettant de savoir pour une case donnée si l'ensemble des + * contraintes concernant la colonne sont respectées.
+ * * @param grille : Grille - * @param c : Case + * @param c : Case * @return boolean : true si toutes les contraintes sont respectées, false sinon */ @Override diff --git a/app/src/main/java/sudoku/ContrainteLigne.java b/app/src/main/java/sudoku/ContrainteLigne.java index 87faf4d..9cff83d 100644 --- a/app/src/main/java/sudoku/ContrainteLigne.java +++ b/app/src/main/java/sudoku/ContrainteLigne.java @@ -1,12 +1,26 @@ package sudoku; +/** + * Implémentation de l'interface Contrainte sur les lignes. + * Cette classe permet de vérifier si les contraintes sur les lignes sont + * respectées. + */ public class ContrainteLigne implements Contrainte { + /** - * Méthode permettant de savoir si l'ensemble des contraintes concernant la ligne sont respectées.
+ * Constructeur de la classe ContrainteLigne + */ + public ContrainteLigne() { + } + + /** + * Méthode permettant de savoir si l'ensemble des contraintes concernant la + * ligne sont respectées.
* Renvoie 0 si au moins l'une des contraintes n'est pas respectée
* Renvoie 1 si toutes les contraintes sont respectées + * * @param grille : Grille - * @param c : Case + * @param c : Case * @return boolean : true si toutes les contraintes sont respectées, false sinon */ @Override diff --git a/app/src/main/java/sudoku/Grille.java b/app/src/main/java/sudoku/Grille.java index 5ad2c8e..1354cdb 100644 --- a/app/src/main/java/sudoku/Grille.java +++ b/app/src/main/java/sudoku/Grille.java @@ -6,8 +6,11 @@ import java.util.Objects; import java.util.Scanner; import sudoku.core.Console; -import sudoku.gui.ColorGenerator; +import sudoku.core.GenerateurCouleur; +/** + * Classe Grille permettant de créer une grille de sudoku. + */ public class Grille { private final int taille; private final Case[][] cases; @@ -40,6 +43,12 @@ public class Grille { } } + /** + * Méthode permettant de mettre à jour la référence au multidoku + * + * @param multidoku : multidoku + * @see Multidoku + */ public void setMultidoku(Multidoku multidoku) { this.multidoku = multidoku; } @@ -51,20 +60,34 @@ public class Grille { */ private void initColors() { // nombre de couleurs = nombre de blocs (pour sudoku classique) - List colors = ColorGenerator.greatScheme(taille); + List colors = GenerateurCouleur.paletteCouleurEtendue(taille); generatedColors = new ArrayList<>(); - for (ColorGenerator.Color color : colors) { + for (GenerateurCouleur.Couleur color : colors) { generatedColors.add(convertToAnsi(color)); } } - private String convertToAnsi(ColorGenerator.Color color) { + /** + * Convertit une couleur en format ANSI pour l'affichage en console. + * + * @param color : couleur à convertir + * @return couleur convertie + */ + private String convertToAnsi(GenerateurCouleur.Couleur color) { int r = Math.round(color.r * 255); int g = Math.round(color.g * 255); int b = Math.round(color.b * 255); return String.format("\u001B[38;2;%d;%d;%dm", r, g, b); } + /** + * Méthode permettant de définir un symbole dans une case en fonction de sa + * ligne, de sa colonne et du symbole + * + * @param ligne : coordonnée de la ligne + * @param colonne : coordonnée de la colonne + * @param symbole : symbole à placer + */ public void setCase(int ligne, int colonne, Symbole symbole) { try { if (symbole != null && !symbolesPossibles.contains(symbole)) { @@ -175,9 +198,10 @@ public class Grille { } /** - * Crée des blocs rectangulaires automatiquement à partir de la taille de la - * grille. - * Ne fonctionne pas pour les grilles dont la taille est un carré parfait. + * Crée des blocs rectangulaires. + * + * @param blocHeight : hauteur du bloc + * @param blocWidth : largeur du bloc */ public void creerBlocRectangulaire(int blocHeight, int blocWidth) { if (taille % blocHeight != 0 || taille % blocWidth != 0) { @@ -208,12 +232,23 @@ public class Grille { } } + /** + * Méthode permettant d'afficher les blocs de la grille à l'aide de la méthode + * toString de la classe Bloc. + */ public void printBlocs() { for (Bloc bloc : blocs) { System.out.println(bloc.toString()); } } + /** + * Méthode utilisée pour le menu princial. + * Méthode permettant de choisir le type de symbole à utiliser pour la grille + * + * @param scanner : scanner pour lire l'entrée utilisateur + * @return int : choix de l'utilisateur + */ public static int choisirTypeSymbole(Scanner scanner) { while (true) { System.out.println("Choisissez le type de symbole :"); @@ -235,6 +270,14 @@ public class Grille { } } + /** + * Méthode utilisée pour le menu principal. + * Méthode permettant de demander à l'utilisateur de saisir les symboles + * possibles pour la grille. + * + * @param choix : choix de l'utilisateur + * @param scanner : scanner pour lire l'entrée utilisateur + */ public void askSetSymbolesPossibles(int choix, Scanner scanner) { try { for (int i = 0; i < taille; i++) { diff --git a/app/src/main/java/sudoku/Multidoku.java b/app/src/main/java/sudoku/Multidoku.java index 4a9acd1..ba9b60a 100644 --- a/app/src/main/java/sudoku/Multidoku.java +++ b/app/src/main/java/sudoku/Multidoku.java @@ -1,19 +1,33 @@ package sudoku; -import java.util.*; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Set; +/** + * Classe représentant un Multidoku, c'est-à-dire une grille combinée de + * plusieurs + * sudokus, avec des contraintes de partage entre les cases. + */ public class Multidoku { private final List placements = new ArrayList<>(); private final List contraintesPartagees; + /** + * Constructeur de la classe Multidoku. + */ public Multidoku() { this.contraintesPartagees = new ArrayList<>(); } /** - * Ajoute un sudoku à la grille combinée, avec un décalage spécifié par rapport à l'origine. - * @param sudoku : sudoku à ajouter - * @param offsetLigne : décalage de la ligne + * Ajoute un sudoku à la grille combinée, avec un décalage spécifié par rapport + * à l'origine. + * + * @param sudoku : sudoku à ajouter + * @param offsetLigne : décalage de la ligne * @param offsetColonne : décalage de la colonne */ public void ajouterSudoku(Sudoku sudoku, int offsetLigne, int offsetColonne) { @@ -23,6 +37,7 @@ public class Multidoku { /** * Ajoute une contrainte de partage entre les cases spécifiées. + * * @param cases : liste de cases partagées */ public void ajouterCasesPartagees(List cases) { @@ -38,6 +53,7 @@ public class Multidoku { /** * Résout le Multidoku en utilisant un algorithme de backtracking. + * * @param afficherEtape : true pour afficher les étapes de résolution * @return true si une solution a été trouvée, false sinon */ @@ -47,7 +63,9 @@ public class Multidoku { } /** - * Collecte toutes les cases vides d'abord pour les cases partagées, puis pour les cases non partagées de la grille combinée. + * Collecte toutes les cases vides d'abord pour les cases partagées, puis pour + * les cases non partagées de la grille combinée. + * * @return liste de cases vides */ private List collecterCellulesVides() { @@ -79,9 +97,11 @@ public class Multidoku { } /** - * Résout récursivement les cases vides de la grille combinée, en utilisant un algorithme de backtracking. - * @param globalCells : liste de cases vides - * @param index : index de la case actuelle + * Résout récursivement les cases vides de la grille combinée, en utilisant un + * algorithme de backtracking. + * + * @param globalCells : liste de cases vides + * @param index : index de la case actuelle * @param afficherEtape : true pour afficher les étapes de résolution * @return true si une solution a été trouvée, false sinon */ @@ -140,6 +160,7 @@ public class Multidoku { /** * Restaure les cases à leur état précédent en utilisant une sauvegarde. + * * @param sauvegarde : sauvegarde des cases à restaurer */ private void restaurerCases(Map sauvegarde) { @@ -149,11 +170,13 @@ public class Multidoku { } /** - * Affecte un symbole à une case, et propage la valeur dans les cases correspondantes des autres sudokus concernés. - * @param ligne : ligne de la case + * Affecte un symbole à une case, et propage la valeur dans les cases + * correspondantes des autres sudokus concernés. + * + * @param ligne : ligne de la case * @param colonne : colonne de la case * @param symbole : symbole à affecter - * @param s : sudoku actuel + * @param s : sudoku actuel * @return true si l'affectation est valide, false sinon */ private boolean setCaseAvecPropagation(int ligne, int colonne, Symbole symbole, Sudoku s) { @@ -192,6 +215,7 @@ public class Multidoku { /** * Trouve le sudoku auquel appartient une case donnée. + * * @param c : case * @return sudoku auquel appartient la case, ou null si non trouvé */ @@ -206,6 +230,7 @@ public class Multidoku { /** * Vérifie si une case appartient à un sudoku donné. + * * @param c : case * @param s : sudoku * @return true si la case appartient au sudoku, false sinon @@ -225,6 +250,7 @@ public class Multidoku { /** * Vérifie si la grille combinée est valide. + * * @return true si la grille est valide, false sinon */ private boolean globalValide() { @@ -241,6 +267,7 @@ public class Multidoku { /** * Vérifie si les contraintes partagées sont respectées. + * * @return true si les contraintes sont respectées, false sinon */ public boolean verifierContraintesPartagees() { @@ -250,6 +277,7 @@ public class Multidoku { /** * Vérifie si une case est partagée. + * * @param c : case * @return true si la case est partagée, false sinon */ @@ -266,10 +294,22 @@ public class Multidoku { * Classe interne pour le placement d'un sudoku dans la grille combinée. */ public static class GlobalCell { + /** Référence au sudoku auquel appartient cette cellule */ public Sudoku sudoku; + + /** Index de ligne dans la grille du sudoku parent */ public int ligne; + + /** Index de colonne dans la grille du sudoku parent */ public int colonne; + /** + * Constructeur de la cellule globale. + * + * @param sudoku : sudoku + * @param ligne : ligne + * @param colonne : colonne + */ public GlobalCell(Sudoku sudoku, int ligne, int colonne) { this.sudoku = sudoku; this.ligne = ligne; @@ -278,13 +318,14 @@ public class Multidoku { } /** - Classe interne pour la contrainte de cases partagées. + * Classe interne pour la contrainte de cases partagées. */ public static class ContrainteCasePartagee implements Contrainte { private final Map casesLiees; // Map associant chaque case à sa correspondante /** * Constructeur de la contrainte de cases partagées. + * * @param cases : liste de cases partagées */ public ContrainteCasePartagee(List cases) { @@ -322,7 +363,8 @@ public class Multidoku { /** * Vérifie si la contrainte de cases partagées est respectée. - * @param grille : grille + * + * @param grille : grille * @param caseActuelle : case actuelle * @return true si la contrainte est respectée, false sinon */ @@ -342,6 +384,7 @@ public class Multidoku { /** * Récupère la case correspondante à une case donnée. + * * @param c : case * @return case correspondante */ @@ -351,6 +394,7 @@ public class Multidoku { /** * Récupère la liste des cases partagées. + * * @return liste de cases partagées */ public Set getCasesLiees() { @@ -360,6 +404,7 @@ public class Multidoku { /** * Méthode toString pour l'affichage de la grille combinée. + * * @return String : représentation de la grille combinée */ @Override diff --git a/app/src/main/java/sudoku/Resolveur.java b/app/src/main/java/sudoku/Resolveur.java index 9b0e5ee..c15a697 100644 --- a/app/src/main/java/sudoku/Resolveur.java +++ b/app/src/main/java/sudoku/Resolveur.java @@ -1,5 +1,14 @@ package sudoku; +/** + * Interface permettant de résoudre un sudoku + */ public interface Resolveur { + /** + * Méthode permettant de résoudre un sudoku + * @param s : sudoku à résoudre + * @param afficherEtape : afficher les étapes de la résolution + * @return true si le sudoku est résolvable, false sinon + */ boolean resoudre(Sudoku s, boolean afficherEtape); } diff --git a/app/src/main/java/sudoku/ResolveurBacktraceSimple.java b/app/src/main/java/sudoku/ResolveurBacktraceSimple.java index b035c9e..ec73923 100644 --- a/app/src/main/java/sudoku/ResolveurBacktraceSimple.java +++ b/app/src/main/java/sudoku/ResolveurBacktraceSimple.java @@ -4,11 +4,27 @@ import java.util.List; import sudoku.core.Console; +/** + * Implémentation d'un résolveur de Sudoku utilisant l'algorithme de + * backtracking. + * Cette classe fournit une solution pour résoudre les grilles de Sudoku + * en testant systématiquement toutes les possibilités valides. + */ public class ResolveurBacktraceSimple implements Resolveur { /** - * Méthode permettant de résoudre un sudoku en utilisant la méthode de backtracking - * @param s : sudoku à résoudre + * Constructeur par défaut du résolveur backtracking. + * Initialise un nouveau résolveur sans état initial. + */ + public ResolveurBacktraceSimple() { + // Constructeur par défaut + } + + /** + * Méthode permettant de résoudre un sudoku en utilisant la méthode de + * backtracking + * + * @param s : sudoku à résoudre * @param afficherEtape : afficher les étapes de la résolution * @return true si le sudoku est résolvable, false sinon */ @@ -23,10 +39,12 @@ public class ResolveurBacktraceSimple implements Resolveur { } /** - * Méthode récursive permettant de résoudre un sudoku, utilisant la méthode de backtracking. - * @param s : sudoku à résoudre + * Méthode récursive permettant de résoudre un sudoku, utilisant la méthode de + * backtracking. + * + * @param s : sudoku à résoudre * @param afficherEtape : afficher les étapes de la résolution - * @param etat : état de la résolution + * @param etat : état de la résolution * @return true si le sudoku est résolvable, false sinon */ private boolean resoudre(Sudoku s, boolean afficherEtape, EtatResolution etat) { @@ -60,9 +78,11 @@ public class ResolveurBacktraceSimple implements Resolveur { /** * Méthode permettant d'afficher le sudoku à chaque étape de sa résolution - * @param s : sudoku - * @param compteur : compteur de l'étape en cours - * @param compteurGeneral : compteur général de la résolution du sudoku (nombre total de tentatives) + * + * @param s : sudoku + * @param compteur : compteur de l'étape en cours + * @param compteurGeneral : compteur général de la résolution du sudoku (nombre + * total de tentatives) */ private void afficherEtapeResolution(Sudoku s, int compteur, int compteurGeneral) { System.out.println("Sudoku, Etape " + compteur + " (Tentative " + compteurGeneral + ")"); @@ -78,8 +98,10 @@ public class ResolveurBacktraceSimple implements Resolveur { /** * Méthode permettant de fixer l'état de la résolution - * @param compteur : compteur de l'étape en cours - * @param compteurGeneral : compteur général de la résolution du sudoku (nombre total de tentatives) + * + * @param compteur : compteur de l'étape en cours + * @param compteurGeneral : compteur général de la résolution du sudoku (nombre + * total de tentatives) */ EtatResolution(int compteur, int compteurGeneral) { this.compteur = compteur; diff --git a/app/src/main/java/sudoku/Sudoku.java b/app/src/main/java/sudoku/Sudoku.java index 0c7cb91..7115c07 100644 --- a/app/src/main/java/sudoku/Sudoku.java +++ b/app/src/main/java/sudoku/Sudoku.java @@ -9,13 +9,18 @@ import java.util.Set; import sudoku.core.Console; +/** + * Classe représentant un sudoku. + */ public class Sudoku { private final Grille grille; private final List contraintes; private String nom; /** - * Constructeur permettant d'initialiser un sudoku à partir de la taille de sa grille + * Constructeur permettant d'initialiser un sudoku à partir de la taille de sa + * grille + * * @param taille : taille de la grille */ public Sudoku(int taille) { @@ -25,18 +30,25 @@ public class Sudoku { /** * Méthode permettant de modifier le nom du sudoku, utilisé pour l'affichage. + * * @param nom : nom du sudoku */ public void setNom(String nom) { this.nom = nom; } + /** + * Méthode permettant de récupérer le nom du sudoku + * + * @return nom du sudoku + */ public String getNom() { return this.nom; } /** * Méthode permettant d'ajouter une contrainte à un sudoku + * * @param contrainte : contrainte à ajouter */ public void ajouterContrainte(Contrainte contrainte) { @@ -44,7 +56,9 @@ public class Sudoku { } /** - * Méthode permettant de vérifier si une case est valide en fonction des contraintes la concernant + * Méthode permettant de vérifier si une case est valide en fonction des + * contraintes la concernant + * * @param c : case à vérifier * @return boolean : true si la case est valide, false sinon */ @@ -58,7 +72,9 @@ public class Sudoku { } /** - * Méthode permettant de vérifier si un sudoku est valide, c'est-à-dire si toutes les cases sont valides. + * Méthode permettant de vérifier si un sudoku est valide, c'est-à-dire si + * toutes les cases sont valides. + * * @return boolean : true si le sudoku est valide, false sinon */ public boolean estValide() { @@ -73,19 +89,27 @@ public class Sudoku { return true; } - + /** + * Méthode utilisée pour verifier toute les contraintes lors d'un ajout de Case + * dans la grille. + * @return boolean : true si toutes les contraintes sont respectées, false sinon + */ public boolean verifierToutesContraintes() { return grille.verifierToutesContraintes(contraintes); } /** * Méthode permettant de retourner la grille complète + * * @return Grille */ public Grille getGrille() { return grille; } + /** + * Méthode du menu principal du jeu. + */ public static void menu() { Scanner scanner = new Scanner(System.in); System.out.println("BIENVENUE DANS LE JEU DE SUDOKU"); @@ -252,6 +276,9 @@ public class Sudoku { return multidoku; } + /** + * Méthode du menu principal du jeu de sudoku. + */ public static void menuGrille() { Scanner scanner = new Scanner(System.in); // ETAPE 1 : TAILLE GRILLE @@ -305,7 +332,8 @@ public class Sudoku { for (int choixContrainte : contraintesChoisies) { switch (choixContrainte) { case 1: - sudoku.ajouterContrainte(new ContrainteBloc(sudoku.getGrille().getTaille(), sudoku.getGrille().getTaille())); + sudoku.ajouterContrainte( + new ContrainteBloc(sudoku.getGrille().getTaille(), sudoku.getGrille().getTaille())); System.out.println("Contrainte Bloc ajoutée."); break; case 2: diff --git a/app/src/main/java/sudoku/SudokuPlacement.java b/app/src/main/java/sudoku/SudokuPlacement.java index ad2a00f..fc18906 100644 --- a/app/src/main/java/sudoku/SudokuPlacement.java +++ b/app/src/main/java/sudoku/SudokuPlacement.java @@ -1,7 +1,12 @@ package sudoku; /** - * Classe permettant de stocker un placement de symbole dans une grille de sudoku. + * Classe permettant de stocker un placement de symbole dans une grille de + * multidoku. + * + * @param sudoku : le sudoku associé + * @param offsetLigne : décalage de la ligne + * @param offsetColonne : décalage de la colonne */ public record SudokuPlacement(Sudoku sudoku, int offsetLigne, int offsetColonne) { } diff --git a/app/src/main/java/sudoku/Symbole.java b/app/src/main/java/sudoku/Symbole.java index 9b1fdb1..d889bfd 100644 --- a/app/src/main/java/sudoku/Symbole.java +++ b/app/src/main/java/sudoku/Symbole.java @@ -1,5 +1,8 @@ package sudoku; +/** + * Classe permettant de créer et gérer un symbole. + */ public class Symbole { private final String valeur; diff --git a/app/src/main/java/sudoku/core/Console.java b/app/src/main/java/sudoku/core/Console.java index db9bd6f..93c5715 100644 --- a/app/src/main/java/sudoku/core/Console.java +++ b/app/src/main/java/sudoku/core/Console.java @@ -1,27 +1,55 @@ package sudoku.core; /** - * Console classe pour afficher des messages en couleur dans la console + * Console classe pour afficher des messages en couleur dans la console. */ public class Console { + + /** + * Constructeur privé pour empêcher l'instanciation de la classe Console. + */ + private Console() { + } + + // Codes ANSI pour les couleurs private static final String ANSI_RESET = "\u001B[0m"; private static final String ANSI_RED = "\u001B[31m"; private static final String ANSI_GREEN = "\u001B[32m"; private static final String ANSI_YELLOW = "\u001B[33m"; static final String ANSI_BOLD = "\u001B[1m"; + /** + * Affiche un message en rouge + * + * @param message : String + */ public static void errorln(String message) { System.err.println(ANSI_RED + ANSI_BOLD + message + ANSI_RESET + "\n"); } + /** + * Affiche un message en vert + * + * @param message : String + */ public static void successln(String message) { System.out.println(ANSI_GREEN + ANSI_BOLD + message + ANSI_RESET + "\n"); } + /** + * Affiche un message en jaune + * + * @param message : String + */ public static void warnln(String message) { System.out.println(ANSI_YELLOW + ANSI_BOLD + message + ANSI_RESET + "\n"); } + /** + * Affiche un message en blanc (par défaut) + * + * @param message : String + */ public static void infoln(String message) { System.out.println(message + "\n"); } diff --git a/app/src/main/java/sudoku/core/GenerateurCouleur.java b/app/src/main/java/sudoku/core/GenerateurCouleur.java new file mode 100644 index 0000000..6ba8d2c --- /dev/null +++ b/app/src/main/java/sudoku/core/GenerateurCouleur.java @@ -0,0 +1,123 @@ +package sudoku.core; + +import java.util.ArrayList; +import java.util.List; + +/** + * Classe permettant de générer des couleurs pour les cases de la grille. + */ +public class GenerateurCouleur { + + /** + * Constructeur privé pour empêcher l'instanciation de la classe + * GenerateurCouleur. + */ + private GenerateurCouleur() { + } + + /** + * Classe interne Couleur représentant une couleur avec des composantes rouge, + * vert et bleu. + */ + public static class Couleur { + /** Composant rouge de la couleur, valeur entre 0 et 1 */ + public float r; + + /** Composant vert de la couleur, valeur entre 0 et 1 */ + public float g; + + /** Composant bleu de la couleur, valeur entre 0 et 1 */ + public float b; + + /** + * Constructeur de la classe Couleur. + * + * @param r Composant rouge (valeur entre 0 et 1) + * @param g Composant vert (valeur entre 0 et 1) + * @param b Composant bleu (valeur entre 0 et 1) + */ + public Couleur(float r, float g, float b) { + this.r = r; + this.g = g; + this.b = b; + } + } + + /** + * Génère une palette de couleurs pour les cases de la grille. + * + * @param colorCount Nombre de couleurs à générer + * @return {@code List} Liste de couleurs générées + */ + public static List paletteCouleur(int colorCount) { + List colors = paletteCouleurEtendue(colorCount); + List newOrder = new ArrayList<>(); + int newIndex = 0; + while (!colors.isEmpty()) { + int randomIndex = newIndex % colors.size(); + newOrder.add(colors.get(randomIndex)); + colors.remove(randomIndex); + newIndex += Math.sqrt(colorCount) + 1; + } + return newOrder; + } + + /** + * Génère une palette de couleurs étendue pour les cases de la grille. + * + * @param colorCount Nombre de couleurs à générer + * @return {@code List} Liste de couleurs générées + */ + public static List paletteCouleurEtendue(int colorCount) { + List colors = new ArrayList<>(); + for (int i = 0; i < colorCount; i++) { + colors.add(hslToRgb((float) (i) / (float) colorCount, 0.9f, 0.4f)); + } + return colors; + } + + /** + * Convertit une couleur HSL en RGB + * + * @param h : float : Hue + * @param s : float : Saturation + * @param l : float : Lightness + * @return Couleur : couleur RGB + */ + public static Couleur hslToRgb(float h, float s, float l) { + float r, g, b; + + if (s == 0f) { + r = g = b = l; // achromatic + } else { + float q = l < 0.5f ? l * (1 + s) : l + s - l * s; + float p = 2 * l - q; + r = hueToRgb(p, q, h + 1f / 3f); + g = hueToRgb(p, q, h); + b = hueToRgb(p, q, h - 1f / 3f); + } + return new Couleur(r, g, b); + } + + /** + * Convertit une couleur hue en RGB + * + * @param p : float + * @param q : float + * @param t : float + * @return float + */ + public static float hueToRgb(float p, float q, float t) { + if (t < 0f) + t += 1f; + if (t > 1f) + t -= 1f; + if (t < 1f / 6f) + return p + (q - p) * 6f * t; + if (t < 1f / 2f) + return q; + if (t < 2f / 3f) + return p + (q - p) * (2f / 3f - t) * 6f; + return p; + } +} \ No newline at end of file diff --git a/app/src/main/java/sudoku/gui/ColorGenerator.java b/app/src/main/java/sudoku/gui/ColorGenerator.java deleted file mode 100644 index 646e103..0000000 --- a/app/src/main/java/sudoku/gui/ColorGenerator.java +++ /dev/null @@ -1,67 +0,0 @@ -package sudoku.gui; - -import java.util.ArrayList; -import java.util.List; - -public class ColorGenerator { - - public static class Color { - public float r, g, b; - - public Color(float r, float g, float b) { - this.r = r; - this.g = g; - this.b = b; - } - } - - public static List greatPalette(int colorCount) { - List colors = greatScheme(colorCount); - List newOrder = new ArrayList<>(); - int newIndex = 0; - while (!colors.isEmpty()) { - int randomIndex = newIndex % colors.size(); - newOrder.add(colors.get(randomIndex)); - colors.remove(randomIndex); - newIndex += Math.sqrt(colorCount) + 1; - } - return newOrder; - } - - public static List greatScheme(int colorCount) { - List colors = new ArrayList<>(); - for (int i = 0; i < colorCount; i++) { - colors.add(hslToRgb((float) (i) / (float) colorCount, 0.9f, 0.4f)); - } - return colors; - } - - public static Color hslToRgb(float h, float s, float l) { - float r, g, b; - - if (s == 0f) { - r = g = b = l; // achromatic - } else { - float q = l < 0.5f ? l * (1 + s) : l + s - l * s; - float p = 2 * l - q; - r = hueToRgb(p, q, h + 1f / 3f); - g = hueToRgb(p, q, h); - b = hueToRgb(p, q, h - 1f / 3f); - } - return new Color(r, g, b); - } - - public static float hueToRgb(float p, float q, float t) { - if (t < 0f) - t += 1f; - if (t > 1f) - t -= 1f; - if (t < 1f / 6f) - return p + (q - p) * 6f * t; - if (t < 1f / 2f) - return q; - if (t < 2f / 3f) - return p + (q - p) * (2f / 3f - t) * 6f; - return p; - } -} \ No newline at end of file diff --git a/app/src/test/java/sudoku/TestBlocParticuliers.java b/app/src/test/java/sudoku/TestBlocParticuliers.java index 37e0e65..975e46a 100644 --- a/app/src/test/java/sudoku/TestBlocParticuliers.java +++ b/app/src/test/java/sudoku/TestBlocParticuliers.java @@ -10,7 +10,7 @@ public class TestBlocParticuliers { @Test public void blocParticuliers() { System.out.println("TEST BLOC PARTICULIERS : "); - System.out.println(new App().getGreeting()); + // Create a new Sudoku Sudoku sudoku = new Sudoku(4); diff --git a/app/src/test/java/sudoku/TestBlocRectangle.java b/app/src/test/java/sudoku/TestBlocRectangle.java index 904aa7e..d8274dd 100644 --- a/app/src/test/java/sudoku/TestBlocRectangle.java +++ b/app/src/test/java/sudoku/TestBlocRectangle.java @@ -9,7 +9,7 @@ public class TestBlocRectangle { @Test public void blocRectangle() { System.out.println("TEST BLOC RECTANGLE : "); - System.out.println(new App().getGreeting()); + // Create a new Sudoku Sudoku sudoku = new Sudoku(15); ArrayList symboles = new ArrayList<>(); diff --git a/app/src/test/java/sudoku/TestDoublonBloc.java b/app/src/test/java/sudoku/TestDoublonBloc.java index 39e8d5c..589f235 100644 --- a/app/src/test/java/sudoku/TestDoublonBloc.java +++ b/app/src/test/java/sudoku/TestDoublonBloc.java @@ -11,7 +11,7 @@ public class TestDoublonBloc { @Test public void testBloc() { System.out.println("TEST DOUBLON BLOC : "); - System.out.println(new App().getGreeting()); + // Create a new Sudoku Sudoku sudoku = new Sudoku(9); sudoku.getGrille().setSymbolesPossibles(new ArrayList<>(Arrays.asList( diff --git a/app/src/test/java/sudoku/TestDoublonColonne.java b/app/src/test/java/sudoku/TestDoublonColonne.java index 478bf4b..902a132 100644 --- a/app/src/test/java/sudoku/TestDoublonColonne.java +++ b/app/src/test/java/sudoku/TestDoublonColonne.java @@ -11,7 +11,7 @@ public class TestDoublonColonne { @Test public void testColonne() { System.out.println("TEST DOUBLON COLONNE : "); - System.out.println(new App().getGreeting()); + // Create a new Sudoku Sudoku sudoku = new Sudoku(9); sudoku.getGrille().setSymbolesPossibles(new ArrayList<>(Arrays.asList( diff --git a/app/src/test/java/sudoku/TestDoublonLigne.java b/app/src/test/java/sudoku/TestDoublonLigne.java index 7966a9f..df9ab9e 100644 --- a/app/src/test/java/sudoku/TestDoublonLigne.java +++ b/app/src/test/java/sudoku/TestDoublonLigne.java @@ -9,7 +9,7 @@ public class TestDoublonLigne { @Test public void testDoublonLigne() { System.out.println("TEST DOUBLON LIGNE : "); - System.out.println(new App().getGreeting()); + // Create a new Sudoku Sudoku sudoku = new Sudoku(9); sudoku.getGrille().setSymbolesPossibles(new ArrayList<>(Arrays.asList( diff --git a/app/src/test/java/sudoku/TestResolveurBacktraceSimpleSudoku16.java b/app/src/test/java/sudoku/TestResolveurBacktraceSimpleSudoku16.java index 7c17fba..7aded8d 100644 --- a/app/src/test/java/sudoku/TestResolveurBacktraceSimpleSudoku16.java +++ b/app/src/test/java/sudoku/TestResolveurBacktraceSimpleSudoku16.java @@ -9,7 +9,7 @@ public class TestResolveurBacktraceSimpleSudoku16 { @Test public void testResolution() { System.out.println("TEST RESOLVEUR BACKTRACE SIMPLE : "); - System.out.println(new App().getGreeting()); + // Create a new Sudoku Sudoku sudoku = new Sudoku(16); sudoku.getGrille().setSymbolesPossibles(new ArrayList<>(Arrays.asList( diff --git a/app/src/test/java/sudoku/TestResolveurBacktraceSimpleSudoku25.java b/app/src/test/java/sudoku/TestResolveurBacktraceSimpleSudoku25.java index b0f085a..cd80b7f 100644 --- a/app/src/test/java/sudoku/TestResolveurBacktraceSimpleSudoku25.java +++ b/app/src/test/java/sudoku/TestResolveurBacktraceSimpleSudoku25.java @@ -14,7 +14,7 @@ // @Test // public void testResolution() { // System.out.println("TEST RESOLVEUR BACKTRACE SIMPLE : "); -// System.out.println(new App().getGreeting()); +// // // Create a new Sudoku // Sudoku sudoku = new Sudoku(25); diff --git a/app/src/test/java/sudoku/TestResolveurBacktraceSimpleSudoku9.java b/app/src/test/java/sudoku/TestResolveurBacktraceSimpleSudoku9.java index f8b02d3..4be5e09 100644 --- a/app/src/test/java/sudoku/TestResolveurBacktraceSimpleSudoku9.java +++ b/app/src/test/java/sudoku/TestResolveurBacktraceSimpleSudoku9.java @@ -9,7 +9,7 @@ public class TestResolveurBacktraceSimpleSudoku9 { @Test public void testResolution() { System.out.println("TEST RESOLVEUR BACKTRACE SIMPLE : "); - System.out.println(new App().getGreeting()); + // Create a new Sudoku Sudoku sudoku = new Sudoku(9); sudoku.getGrille().setSymbolesPossibles(new ArrayList<>(Arrays.asList( diff --git a/app/src/test/java/sudoku/TestSudokuEmojis.java b/app/src/test/java/sudoku/TestSudokuEmojis.java index b26597d..9eae6e4 100644 --- a/app/src/test/java/sudoku/TestSudokuEmojis.java +++ b/app/src/test/java/sudoku/TestSudokuEmojis.java @@ -9,7 +9,7 @@ public class TestSudokuEmojis { @Test public void sudokuEmojis() { System.out.println("TEST SUDOKU EMOJIS : "); - System.out.println(new App().getGreeting()); + // Create a new Sudoku Sudoku sudoku = new Sudoku(9); diff --git a/app/src/test/java/sudoku/TestSudokuLettres.java b/app/src/test/java/sudoku/TestSudokuLettres.java index 3e440e9..c416a09 100644 --- a/app/src/test/java/sudoku/TestSudokuLettres.java +++ b/app/src/test/java/sudoku/TestSudokuLettres.java @@ -9,7 +9,7 @@ public class TestSudokuLettres { @Test public void sudokuLettres() { System.out.println("TEST SUDOKU LETTRES : "); - System.out.println(new App().getGreeting()); + // Create a new Sudoku Sudoku sudoku = new Sudoku(9); diff --git a/app/src/test/java/sudoku/TestSudokusString.java b/app/src/test/java/sudoku/TestSudokusString.java index 6f73c83..41bb228 100644 --- a/app/src/test/java/sudoku/TestSudokusString.java +++ b/app/src/test/java/sudoku/TestSudokusString.java @@ -9,7 +9,7 @@ public class TestSudokusString { @Test public void sudokuString() { System.out.println("TEST SUDOKU STRING : "); - System.out.println(new App().getGreeting()); + // Create a new Sudoku Sudoku sudoku = new Sudoku(9);