From 059886c2a46320b7426b3f41d1983f4ae2f804bc Mon Sep 17 00:00:00 2001 From: Melvyn Date: Sun, 2 Feb 2025 00:02:47 +0100 Subject: [PATCH] feat : createPlusMMultidoku --- app/src/main/java/gui/Main.java | 14 +++- .../java/sudoku/structure/SudokuFactory.java | 68 ++++++++++++++----- 2 files changed, 63 insertions(+), 19 deletions(-) diff --git a/app/src/main/java/gui/Main.java b/app/src/main/java/gui/Main.java index 5f5e25e..a59d779 100644 --- a/app/src/main/java/gui/Main.java +++ b/app/src/main/java/gui/Main.java @@ -2,10 +2,15 @@ package gui; import gui.constants.Fonts; import gui.constants.Images; +import gui.constants.Symbols; import gui.menu.MainMenu; import gui.menu.StateMachine; import imgui.app.Application; import imgui.app.Configuration; +import sudoku.io.SudokuPrinter; +import sudoku.structure.Difficulty; +import sudoku.structure.MultiDoku; +import sudoku.structure.SudokuFactory; public class Main extends Application { @@ -41,6 +46,13 @@ public class Main extends Application { } public static void main(String[] args) { - launch(new Main()); + MultiDoku doku = SudokuFactory.createBasicPlusShapedMultidoku(3, 3, SudokuFactory.DEFAULT_CONSTRAINTS); + try { + SudokuFactory.fillDoku(doku, Difficulty.Easy); + } catch (Exception e) { + throw new RuntimeException(); + } + SudokuPrinter.printMultiDoku(doku, 3, 3, Symbols.Numbers); + //launch(new Main()); } } \ No newline at end of file diff --git a/app/src/main/java/sudoku/structure/SudokuFactory.java b/app/src/main/java/sudoku/structure/SudokuFactory.java index 252d374..332e80b 100644 --- a/app/src/main/java/sudoku/structure/SudokuFactory.java +++ b/app/src/main/java/sudoku/structure/SudokuFactory.java @@ -234,24 +234,7 @@ public class SudokuFactory { public static MultiDoku createBasicXShapedMultidoku(int size, List constraints) { assert (size > 1); - /* - * 2 3 - * 1 - * 4 5 - */ - - Sudoku sudoku1 = createSquareSudoku(size, constraints); - Sudoku sudoku2 = createSquareSudoku(size, constraints); - Sudoku sudoku3 = createSquareSudoku(size, constraints); - Sudoku sudoku4 = createSquareSudoku(size, constraints); - Sudoku sudoku5 = createSquareSudoku(size, constraints); - - linkRectangleSudokus(sudoku1, sudoku2, new Coordinate(1 - size, 1 - size)); - linkRectangleSudokus(sudoku1, sudoku3, new Coordinate(size - 1, 1 - size)); - linkRectangleSudokus(sudoku1, sudoku4, new Coordinate(1 - size, size - 1)); - linkRectangleSudokus(sudoku1, sudoku5, new Coordinate(size - 1, size - 1)); - - return new MultiDoku(Arrays.asList(sudoku1, sudoku2, sudoku3, sudoku4, sudoku5)); + return createBasicXShapedMultidoku(size, size, constraints); } /** @@ -287,6 +270,55 @@ public class SudokuFactory { return new MultiDoku(Arrays.asList(sudoku1, sudoku2, sudoku3, sudoku4, sudoku5)); } + /** + * TODO + * Créée un MultiDoku de Blocks carrés de taille size composé de cinq Sudokus, + * dont un central qui partage chacun de ses Blockss d'angle avec un autre + * Sudoku. + * + * @param size int, largeur des Blocks unitraires des Sudokus à crééer. + * @return MultiDoku, MultiDoku de forme X. + */ + public static MultiDoku createBasicPlusShapedMultidoku(int size, List constraints) { + assert (size > 1); + + return createBasicPlusShapedMultidoku(size, size, constraints); + } + + /** + * TODO + * Créée un MultiDoku de Blocks rectangulaires de forme width par height composé + * de cinq Sudokus, + * dont un central qui partage chacun de ses Blocks d'angle avec un autre + * Sudoku. + * + * @param width int, largeur des Blocks unitraires des Sudokus à crééer. + * @param height int, hauteur des Blocks unitraires des Sudokus à crééer. + * @return MultiDoku, MultiDoku de forme X. + */ + public static MultiDoku createBasicPlusShapedMultidoku(int width, int height, List constraints) { + assert (width > 1 && height > 1); + + /* + * 3 + * 2 1 4 + * 5 + */ + + Sudoku sudoku1 = createRectangleSudoku(width, height, constraints); + Sudoku sudoku2 = createRectangleSudoku(width, height, constraints); + Sudoku sudoku3 = createRectangleSudoku(width, height, constraints); + Sudoku sudoku4 = createRectangleSudoku(width, height, constraints); + Sudoku sudoku5 = createRectangleSudoku(width, height, constraints); + + linkRectangleSudokus(sudoku1, sudoku2, new Coordinate(1 - height, 0)); + linkRectangleSudokus(sudoku1, sudoku3, new Coordinate(0, 1 - width)); + linkRectangleSudokus(sudoku1, sudoku4, new Coordinate(height - 1, 0)); + linkRectangleSudokus(sudoku1, sudoku5, new Coordinate(0, width - 1)); + + return new MultiDoku(Arrays.asList(sudoku1, sudoku2, sudoku3, sudoku4, sudoku5)); + } + public static void fillDoku(MultiDoku doku, Difficulty difficulty) throws Exception { Solver solver = new RandomSolver(); solver.solve(doku);