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());
|
||||
|
||||
try{
|
||||
Sudoku.menuGrille();
|
||||
Sudoku.menu();
|
||||
} catch (Exception e){
|
||||
System.err.println("Une erreur fatale est survenue : " + e.getMessage());
|
||||
e.printStackTrace();
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
package sudoku;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Scanner;
|
||||
@@ -59,6 +60,172 @@ public class Sudoku {
|
||||
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() {
|
||||
Scanner scanner = new Scanner(System.in);
|
||||
// ETAPE 1 : TAILLE GRILLE
|
||||
|
||||
Reference in New Issue
Block a user