feat: implement main menu for Sudoku and Multidoku selection (basic for multidoku)
This commit is contained in:
@@ -9,7 +9,7 @@ public class App {
|
|||||||
System.out.println(new App().getGreeting());
|
System.out.println(new App().getGreeting());
|
||||||
|
|
||||||
try{
|
try{
|
||||||
Sudoku.menuGrille();
|
Sudoku.menu();
|
||||||
} catch (Exception e){
|
} catch (Exception e){
|
||||||
System.err.println("Une erreur fatale est survenue : " + e.getMessage());
|
System.err.println("Une erreur fatale est survenue : " + e.getMessage());
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
package sudoku;
|
package sudoku;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.Arrays;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Scanner;
|
import java.util.Scanner;
|
||||||
@@ -59,6 +60,172 @@ public class Sudoku {
|
|||||||
return grille;
|
return grille;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static void menu() {
|
||||||
|
Scanner scanner = new Scanner(System.in);
|
||||||
|
System.out.println("BIENVENUE DANS LE JEU DE SUDOKU");
|
||||||
|
|
||||||
|
while (true) {
|
||||||
|
System.out.println("\nChoisissez le type de jeu :");
|
||||||
|
System.out.println("1 : Sudoku classique");
|
||||||
|
System.out.println("2 : Multidoku (prérempli)");
|
||||||
|
System.out.println("0 : Quitter");
|
||||||
|
|
||||||
|
try {
|
||||||
|
int choix = Integer.parseInt(scanner.nextLine());
|
||||||
|
|
||||||
|
switch (choix) {
|
||||||
|
case 0:
|
||||||
|
System.out.println("Au revoir !");
|
||||||
|
return;
|
||||||
|
case 1:
|
||||||
|
menuGrille();
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
menuMultidoku();
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
System.out.println("Choix invalide. Veuillez réessayer.");
|
||||||
|
}
|
||||||
|
} catch (NumberFormatException e) {
|
||||||
|
System.out.println("Entrée invalide. Veuillez entrer un nombre.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void menuMultidoku() {
|
||||||
|
final int PAUSE_TIME = 3000; // 3 seconds
|
||||||
|
|
||||||
|
System.out.println("MULTIDOKU");
|
||||||
|
System.out.println("\nChoisissez un type de Multidoku :");
|
||||||
|
System.out.println("1 : Multidoku avec cases partagées");
|
||||||
|
System.out.println("2 : Multidoku avec bloc partagé");
|
||||||
|
System.out.println("3 : Multidoku avec ligne partagée");
|
||||||
|
System.out.println("4 : Multidoku avec colonne partagée");
|
||||||
|
|
||||||
|
Scanner scanner = new Scanner(System.in);
|
||||||
|
try {
|
||||||
|
int choix = Integer.parseInt(scanner.nextLine());
|
||||||
|
Multidoku multidoku = creerMultidoku(choix);
|
||||||
|
if (multidoku != null) {
|
||||||
|
System.out.println("\nMultidoku initial :");
|
||||||
|
System.out.println(multidoku.toStringCombined());
|
||||||
|
|
||||||
|
System.out.println("\nDébut de la résolution dans 3 secondes...");
|
||||||
|
try {
|
||||||
|
Thread.sleep(PAUSE_TIME);
|
||||||
|
} catch (InterruptedException e) {
|
||||||
|
Thread.currentThread().interrupt();
|
||||||
|
}
|
||||||
|
System.out.println("\nRésolution du Multidoku...");
|
||||||
|
|
||||||
|
if (multidoku.resoudreMultidoku(true)) {
|
||||||
|
System.out.println("\nMultidoku résolu :");
|
||||||
|
System.out.println(multidoku.toStringCombined());
|
||||||
|
} else {
|
||||||
|
System.out.println("Ce Multidoku n'a pas de solution.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (NumberFormatException e) {
|
||||||
|
System.out.println("Entrée invalide. Veuillez entrer un nombre.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static Multidoku creerMultidoku(int type) {
|
||||||
|
Multidoku multidoku = new Multidoku();
|
||||||
|
Sudoku s1 = new Sudoku(9);
|
||||||
|
Sudoku s2 = new Sudoku(9);
|
||||||
|
s1.setNom("Sudoku 1");
|
||||||
|
s2.setNom("Sudoku 2");
|
||||||
|
|
||||||
|
// Configuration commune
|
||||||
|
ArrayList<Symbole> symboles = new ArrayList<>();
|
||||||
|
for (int i = 1; i <= 9; i++) {
|
||||||
|
symboles.add(Symbole.of(i));
|
||||||
|
}
|
||||||
|
|
||||||
|
for (Sudoku s : Arrays.asList(s1, s2)) {
|
||||||
|
s.getGrille().setSymbolesPossibles(symboles);
|
||||||
|
s.ajouterContrainte(new ContrainteLigne());
|
||||||
|
s.ajouterContrainte(new ContrainteColonne());
|
||||||
|
s.ajouterContrainte(new ContrainteBloc());
|
||||||
|
s.getGrille().creerBlocCarre();
|
||||||
|
}
|
||||||
|
|
||||||
|
switch (type) {
|
||||||
|
case 1: // Cases partagées
|
||||||
|
multidoku.ajouterSudoku(s1, 0, 0);
|
||||||
|
multidoku.ajouterSudoku(s2, 8, 8);
|
||||||
|
multidoku.ajouterCasesPartagees(Arrays.asList(
|
||||||
|
s1.getGrille().getCase(8, 8),
|
||||||
|
s2.getGrille().getCase(0, 0)));
|
||||||
|
break;
|
||||||
|
case 2: // Bloc partagé
|
||||||
|
multidoku.ajouterSudoku(s1, 0, 0);
|
||||||
|
multidoku.ajouterSudoku(s2, 6, 6);
|
||||||
|
List<Case> casesBloc = new ArrayList<>();
|
||||||
|
for (int i = 6; i < 9; i++) {
|
||||||
|
for (int j = 6; j < 9; j++) {
|
||||||
|
casesBloc.add(s1.getGrille().getCase(i, j));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for (int i = 0; i < 3; i++) {
|
||||||
|
for (int j = 0; j < 3; j++) {
|
||||||
|
casesBloc.add(s2.getGrille().getCase(i, j));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
multidoku.ajouterCasesPartagees(casesBloc);
|
||||||
|
break;
|
||||||
|
case 3: // Ligne partagée
|
||||||
|
multidoku.ajouterSudoku(s1, 0, 0);
|
||||||
|
multidoku.ajouterSudoku(s2, 8, 1);
|
||||||
|
multidoku.ajouterCasesPartagees(Arrays.asList(s1.getGrille().getCase(8, 1),
|
||||||
|
s1.getGrille().getCase(8, 2),
|
||||||
|
s1.getGrille().getCase(8, 3),
|
||||||
|
s1.getGrille().getCase(8, 4),
|
||||||
|
s1.getGrille().getCase(8, 5),
|
||||||
|
s1.getGrille().getCase(8, 6),
|
||||||
|
s1.getGrille().getCase(8, 7),
|
||||||
|
s1.getGrille().getCase(8, 8),
|
||||||
|
|
||||||
|
s2.getGrille().getCase(0, 0),
|
||||||
|
s2.getGrille().getCase(0, 1),
|
||||||
|
s2.getGrille().getCase(0, 2),
|
||||||
|
s2.getGrille().getCase(0, 3),
|
||||||
|
s2.getGrille().getCase(0, 4),
|
||||||
|
s2.getGrille().getCase(0, 5),
|
||||||
|
s2.getGrille().getCase(0, 6),
|
||||||
|
s2.getGrille().getCase(0, 7)));
|
||||||
|
break;
|
||||||
|
case 4: // Colonne partagée
|
||||||
|
multidoku.ajouterSudoku(s1, 0, 0);
|
||||||
|
multidoku.ajouterSudoku(s2, 1, 8);
|
||||||
|
multidoku.ajouterCasesPartagees(Arrays.asList(
|
||||||
|
s1.getGrille().getCase(1, 8),
|
||||||
|
s1.getGrille().getCase(2, 8),
|
||||||
|
s1.getGrille().getCase(3, 8),
|
||||||
|
s1.getGrille().getCase(4, 8),
|
||||||
|
s1.getGrille().getCase(5, 8),
|
||||||
|
s1.getGrille().getCase(6, 8),
|
||||||
|
s1.getGrille().getCase(7, 8),
|
||||||
|
s1.getGrille().getCase(8, 8),
|
||||||
|
|
||||||
|
s2.getGrille().getCase(0, 0),
|
||||||
|
s2.getGrille().getCase(1, 0),
|
||||||
|
s2.getGrille().getCase(2, 0),
|
||||||
|
s2.getGrille().getCase(3, 0),
|
||||||
|
s2.getGrille().getCase(4, 0),
|
||||||
|
s2.getGrille().getCase(5, 0),
|
||||||
|
s2.getGrille().getCase(6, 0),
|
||||||
|
s2.getGrille().getCase(7, 0)));
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
System.out.println("Type de Multidoku non valide");
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
return multidoku;
|
||||||
|
}
|
||||||
|
|
||||||
public static void menuGrille() {
|
public static void menuGrille() {
|
||||||
Scanner scanner = new Scanner(System.in);
|
Scanner scanner = new Scanner(System.in);
|
||||||
// ETAPE 1 : TAILLE GRILLE
|
// ETAPE 1 : TAILLE GRILLE
|
||||||
|
|||||||
Reference in New Issue
Block a user