package sudoku; import sudoku.constraint.BlockConstraint; import sudoku.constraint.ColumnConstraint; import sudoku.constraint.IConstraint; import sudoku.constraint.LineConstraint; import java.util.ArrayList; import java.util.List; public class SudokuFactory { private static List initCells(int size) { List cells = new ArrayList<>(size * size); for (int i = 0; i < size * size; i++) { cells.add(new MutableCell()); } return cells; } private static List initRectangleBlocs(List cells, int width, int height) { List blocs = new ArrayList<>(); int size = width * height; for (int i = 0; i < size; i++) { Block newBlock = new Block(); int blockX = i % height; int blockY = i / height; for (int y = 0; y < height; y++) { for (int x = 0; x < width; x++) { int index = ((y + blockY * height) * size + (x + blockX * width)); Cell blockCell = cells.get(index); blockCell.setBlock(newBlock); // List blockContainers = new ArrayList<>(); // blockContainers.add(newBlock); // blockCell.setBlockContainers(blockContainers); newBlock.addCell(blockCell); } } blocs.add(newBlock); } return blocs; } public static MultiDoku createBasicEmptyRectangleSudoku(int widthBlock, int heightBlock) { int symbolCount = widthBlock * heightBlock; List cases = initCells(symbolCount); List blocs = initRectangleBlocs(cases, widthBlock, heightBlock); List constraints = new ArrayList<>(); constraints.add(new ColumnConstraint()); constraints.add(new LineConstraint()); constraints.add(new BlockConstraint()); Sudoku s = new Sudoku(cases, blocs, constraints); List subSudoku = new ArrayList<>(); subSudoku.add(s); return new MultiDoku(subSudoku); } public static MultiDoku createBasicEmptySquareSudoku(int size) { return createBasicEmptyRectangleSudoku(size, size); } }