feat: enhance menu, colors, sudoku, all is working, now multidoku ^^
This commit is contained in:
@@ -50,16 +50,101 @@ public class Sudoku {
|
||||
Sudoku sudoku = new Sudoku(tailleGrille);
|
||||
// ETAPE 2 : SYMBOLE POSSIBLE
|
||||
System.out.println("ETAPE 2 : Choisir les symboles possibles");
|
||||
sudoku.getGrille().askSetSymbolesPossibles(); // demande à l'utilisateur de saisir ses symboles
|
||||
int typeSymbole = Grille.choisirTypeSymbole(scanner);
|
||||
sudoku.getGrille().askSetSymbolesPossibles(typeSymbole, scanner); // demande à l'utilisateur de saisir ses
|
||||
// symboles
|
||||
// ETAPE 3 : REMPLIR LA GRILLE
|
||||
System.out.println("ETAPE 3 : Remplir la grille");
|
||||
setValeursGrille(sudoku, scanner, tailleGrille);
|
||||
System.out.println("Voici votre sudoku : ");
|
||||
setValeursGrille(sudoku, scanner, tailleGrille, typeSymbole);
|
||||
System.out.println("Voici votre sudoku rempli :");
|
||||
System.out.println(sudoku.getGrille().toString());
|
||||
// System.out.println("ETAPE 4 : Choisir type de grille");
|
||||
// ETAPE 4 : CHOIX DES CONTRAINTES
|
||||
choixContraintes(sudoku, scanner);
|
||||
// ETAPE 5 : RESOLUTION
|
||||
System.out.println("ETAPE 5 : Résolution du sudoku");
|
||||
choixResolution(sudoku, scanner);
|
||||
|
||||
return sudoku;
|
||||
}
|
||||
|
||||
private static void choixContraintes(Sudoku sudoku, Scanner scanner) {
|
||||
System.out.println("Choisissez une combinaison entre 0 et 3 contraintes parmi les suivantes :");
|
||||
System.out.println("1: Contrainte Bloc, 2: Contrainte Ligne, 3: Contrainte Colonne");
|
||||
System.out.println(
|
||||
"Entrez les numéros des contraintes séparés par des virgules (par exemple, 1,2,3) ou appuyez sur Entrée pour aucune contrainte :");
|
||||
|
||||
String input = scanner.nextLine();
|
||||
if (input.trim().isEmpty()) {
|
||||
System.out.println("Aucune contrainte sélectionnée.");
|
||||
return;
|
||||
}
|
||||
|
||||
String[] choix = input.split(",");
|
||||
Set<Integer> contraintesChoisies = new HashSet<>();
|
||||
for (String choixStr : choix) {
|
||||
try {
|
||||
int choixInt = Integer.parseInt(choixStr.trim());
|
||||
if (choixInt >= 1 && choixInt <= 3) {
|
||||
contraintesChoisies.add(choixInt);
|
||||
} else {
|
||||
System.out.println("Choix invalide : " + choixInt);
|
||||
}
|
||||
} catch (NumberFormatException e) {
|
||||
System.out.println("Entrée invalide : " + choixStr);
|
||||
}
|
||||
}
|
||||
|
||||
for (int choixContrainte : contraintesChoisies) {
|
||||
switch (choixContrainte) {
|
||||
case 1:
|
||||
sudoku.ajouterContrainte(new ContrainteBloc());
|
||||
System.out.println("Contrainte Bloc ajoutée.");
|
||||
break;
|
||||
case 2:
|
||||
sudoku.ajouterContrainte(new ContrainteLigne());
|
||||
System.out.println("Contrainte Ligne ajoutée.");
|
||||
break;
|
||||
case 3:
|
||||
sudoku.ajouterContrainte(new ContrainteColonne());
|
||||
System.out.println("Contrainte Colonne ajoutée.");
|
||||
break;
|
||||
default:
|
||||
System.out.println("Choix invalide : " + choixContrainte);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void resolutionSudoku(Sudoku sudoku, boolean afficherEtape) {
|
||||
ResolveurBacktraceSimple resolveur = new ResolveurBacktraceSimple(sudoku);
|
||||
resolveur.resoudre(sudoku, afficherEtape);
|
||||
System.out.println("Sudoku résolu :");
|
||||
System.out.println(sudoku.getGrille().toString());
|
||||
}
|
||||
|
||||
private static void choixResolution(Sudoku sudoku, Scanner scanner) {
|
||||
System.out.println("Voulez-vous résoudre le sudoku ? (O/N)");
|
||||
String choix = scanner.nextLine();
|
||||
if (choix.equalsIgnoreCase("O")) {
|
||||
System.out.println("Résolution du sudoku.");
|
||||
// resolutionSudoku(sudoku);
|
||||
System.out.println("Voulez-vous afficher les étapes de la résolution ? (O/N)");
|
||||
String choixAffichageEtapes = scanner.nextLine();
|
||||
|
||||
if (choixAffichageEtapes.equalsIgnoreCase("O")) {
|
||||
sudoku.resolutionSudoku(sudoku, true);
|
||||
} else if (choixAffichageEtapes.equalsIgnoreCase("N")) {
|
||||
sudoku.resolutionSudoku(sudoku, false);
|
||||
} else {
|
||||
System.err.println("Choix invalide.");
|
||||
}
|
||||
} else if (choix.equalsIgnoreCase("N")) {
|
||||
System.err.println("Fin du jeu.");
|
||||
} else {
|
||||
System.out.println("Choix invalide.");
|
||||
choixResolution(sudoku, scanner);
|
||||
}
|
||||
}
|
||||
|
||||
private static int setTailleGrille(Scanner scanner) {
|
||||
int tailleGrille = -1;
|
||||
while (tailleGrille <= 0) {
|
||||
@@ -75,14 +160,14 @@ public class Sudoku {
|
||||
return tailleGrille;
|
||||
}
|
||||
|
||||
private static Sudoku setValeursGrille(Sudoku sudoku, Scanner scanner, int tailleGrille) {
|
||||
private static Sudoku setValeursGrille(Sudoku sudoku, Scanner scanner, int tailleGrille, int typeSymbole) {
|
||||
// Etude de la taille de la grille pour choisir le type de génération
|
||||
if (carreParfait(tailleGrille)) {
|
||||
System.out.println(tailleGrille + " est un carré parfait.");
|
||||
sudoku.getGrille().creerBlocCarre();
|
||||
} else {
|
||||
while (true) {
|
||||
System.out.println("Veillez faire votre choix");
|
||||
System.out.println("Veuillez faire votre choix");
|
||||
System.out.println("1 : Entrer les blocs manuellement");
|
||||
System.out.println("2 : Entrer les blocs à l'aide de la longueur et de la largeur");
|
||||
|
||||
@@ -93,16 +178,24 @@ public class Sudoku {
|
||||
// Entrer les blocs manuellement
|
||||
System.out.println("Entrez les blocs manuellement.");
|
||||
creationBlocMannuel(sudoku, scanner, tailleGrille);
|
||||
|
||||
break;
|
||||
case 2:
|
||||
// Entrer les blocs à l'aide de la longueur et de la largeur
|
||||
System.out.println("Entrez les blocs à l'aide de la longueur et de la largeur.");
|
||||
System.out.println("Entrez la longueur du bloc : ");
|
||||
int longueurBloc = scanner.nextInt();
|
||||
System.out.println("Entrez la largeur du bloc :");
|
||||
int largeurBloc = scanner.nextInt();
|
||||
sudoku.getGrille().creerBlocRectangulaire(longueurBloc, largeurBloc);
|
||||
boolean validDimensions = false;
|
||||
while (!validDimensions) {
|
||||
try {
|
||||
System.out.println("Entrez les blocs à l'aide de la longueur et de la largeur.");
|
||||
System.out.println("Entrez la longueur du bloc : ");
|
||||
int longueurBloc = Integer.parseInt(scanner.nextLine());
|
||||
System.out.println("Entrez la largeur du bloc :");
|
||||
int largeurBloc = Integer.parseInt(scanner.nextLine());
|
||||
sudoku.getGrille().creerBlocRectangulaire(longueurBloc, largeurBloc);
|
||||
validDimensions = true; // Sortir de la boucle si aucune exception n'est lancée
|
||||
} catch (IllegalArgumentException e) {
|
||||
Console.errorln("Erreur : " + e.getMessage());
|
||||
Console.errorln("Veuillez entrer des dimensions valides.");
|
||||
}
|
||||
}
|
||||
break;
|
||||
default:
|
||||
Console.errorln("Choix invalide.");
|
||||
@@ -111,13 +204,16 @@ public class Sudoku {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// DEBUT DU REMPLISSAGE DU SUDOKU
|
||||
String input;
|
||||
while (true) {
|
||||
// Demander et vérifier la ligne
|
||||
int ligne = -1;
|
||||
while (true) {
|
||||
System.out.println("Entrez le numéro de ligne (ou tapez ESC pour quitter) :");
|
||||
System.out.println("Pour arrêter la saisie, tapez \"esc\".");
|
||||
System.out.println(
|
||||
"Entrez le numéro de ligne :");
|
||||
input = scanner.nextLine(); // Lire la ligne
|
||||
if (input.equalsIgnoreCase("ESC")) {
|
||||
break; // Sortie de la boucle si l'utilisateur tape ESC
|
||||
@@ -158,20 +254,43 @@ public class Sudoku {
|
||||
// Demander et vérifier le symbole
|
||||
String symbole = "";
|
||||
while (true) {
|
||||
System.out.println("Entrez le numéro du symbole :");
|
||||
System.out.println("Entrez le symbole :");
|
||||
symbole = scanner.nextLine(); // Lire le symbole
|
||||
if (symbole.isEmpty()) {
|
||||
System.out.println("Veuillez entrer un symbole valide.");
|
||||
continue; // Recommencer la saisie du symbole si l'entrée est vide
|
||||
}
|
||||
break; // Sortir de la boucle si le symbole est valide
|
||||
try {
|
||||
Symbole s = null;
|
||||
switch (typeSymbole) {
|
||||
case 1:
|
||||
// Entiers
|
||||
s = Symbole.of(Integer.parseInt(symbole));
|
||||
break;
|
||||
case 2:
|
||||
// Lettres
|
||||
if (symbole.length() == 1 && Character.isLetter(symbole.charAt(0))) {
|
||||
s = Symbole.of(symbole.charAt(0));
|
||||
} else {
|
||||
throw new IllegalArgumentException("Veuillez entrer une seule lettre.");
|
||||
}
|
||||
break;
|
||||
case 3:
|
||||
// Chaînes de caractères
|
||||
s = Symbole.of(symbole);
|
||||
break;
|
||||
default:
|
||||
throw new IllegalArgumentException("Type de symbole invalide.");
|
||||
}
|
||||
sudoku.getGrille().setCase(ligne, colonne, s); // Ajouter le symbole à la grille
|
||||
|
||||
System.out.println(sudoku.getGrille().toString());
|
||||
break; // Sortir de la boucle si le symbole est valide
|
||||
} catch (IllegalArgumentException e) {
|
||||
System.out.println("Symbole non valide. " + e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
// Assigner la valeur dans la grille
|
||||
sudoku.getGrille().setCase(ligne, colonne, Symbole.of(symbole));
|
||||
System.out.println(sudoku.getGrille().toString());
|
||||
}
|
||||
|
||||
return sudoku;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user