render multidoku (may be broken)
Some checks are pending
Linux arm64 / Build (push) Waiting to run

This commit is contained in:
2025-01-27 15:52:00 +01:00
parent 3a0279afe3
commit e9a77d9826

View File

@@ -79,8 +79,39 @@ public class RenderableMultidoku {
}
private static Coordinate getMinSudokuOffset(Map<Sudoku, Coordinate> sudokusOffset) {
// TODO
return null;
Coordinate minCoordinate = null;
for (Coordinate coordinate : sudokusOffset.values()) {
if (minCoordinate == null)
minCoordinate = coordinate;
minCoordinate = new Coordinate(Math.min(minCoordinate.getX(), coordinate.getX()), Math.min(minCoordinate.getY(), coordinate.getY()));
}
return minCoordinate;
}
private static Coordinate getMaxSudokuCoordinate(Map<Sudoku, Coordinate> sudokusOffset) {
Coordinate maxCoordinate = null;
Sudoku maxSudoku = null;
float maxDistanceSquared = 0;
for (var entry : sudokusOffset.entrySet()) {
Coordinate coordinate = entry.getValue();
float distanceSquared = coordinate.getX() * coordinate.getX() + coordinate.getY() * coordinate.getY();
if (maxCoordinate == null) {
maxCoordinate = coordinate;
maxDistanceSquared = distanceSquared;
maxSudoku = entry.getKey();
}
if (distanceSquared > maxDistanceSquared) {
maxDistanceSquared = distanceSquared;
maxSudoku = entry.getKey();
maxCoordinate = coordinate;
}
}
int blockWidth = maxSudoku.getBlockWidth();
int blockHeight = maxSudoku.getSize() / blockWidth;
return new Coordinate((maxCoordinate.getX() + blockHeight) * blockWidth, (maxCoordinate.getY() + blockWidth) * blockHeight);
}
public static RenderableMultidoku fromMultidoku(MultiDoku doku) {
@@ -126,9 +157,21 @@ public class RenderableMultidoku {
List<Block> blocks = new ArrayList<>();
List<Cell> cells = new ArrayList<>();
// TODO: dernière étape
for (Sudoku sudoku : doku.getSubGrids()) {
for (Block block : sudoku.getBlocks()) {
if (!blocks.contains(block)) {
blocks.add(block);
}
}
for (Cell cell : sudoku.getCells()) {
if (!cells.contains(cell))
cells.add(cell);
}
}
return new RenderableMultidoku(blocks, cells, 0, 0);
Coordinate maxCoordinate = getMaxSudokuCoordinate(sudokusOffset);
return new RenderableMultidoku(blocks, cells, maxCoordinate.getX(), maxCoordinate.getY());
}
}