This commit is contained in:
Adrien DICK 2024-04-03 12:25:19 +02:00
parent 3c29242a61
commit 1333177f88
10 changed files with 56 additions and 26 deletions

Binary file not shown.

Binary file not shown.

View File

@ -36,8 +36,12 @@ public class Enter extends JPanel {
String valueStr = JOptionPane.showInputDialog(null, "Enter value for the selected cell:"); String valueStr = JOptionPane.showInputDialog(null, "Enter value for the selected cell:");
try { try {
int value = Integer.parseInt(valueStr); int value = Integer.parseInt(valueStr);
grid[selectedRow][selectedCol] = value; if (isValidValue(value, selectedRow, selectedCol)) {
repaint(); grid[selectedRow][selectedCol] = value;
repaint();
} else {
JOptionPane.showMessageDialog(null, "Not possible.");
}
} catch (NumberFormatException ex) { } catch (NumberFormatException ex) {
JOptionPane.showMessageDialog(null, "Invalid input. Please enter a number."); JOptionPane.showMessageDialog(null, "Invalid input. Please enter a number.");
} }
@ -50,41 +54,67 @@ public class Enter extends JPanel {
} }
public int[][] getInitialGrid() { public int[][] getInitialGrid() {
return initialGrid; return initialGrid;
} }
private boolean isValidValue(int value, int row, int col) {
// Vérifier la ligne
for (int i = 0; i < grid[row].length; i++) {
if (grid[row][i] == value && i != col) {
return false;
}
}
// Vérifier la colonne
for (int i = 0; i < grid.length; i++) {
if (grid[i][col] == value && i != row) {
return false;
}
}
// Vérifier la région
int regionRow = row / REGION_SIZE * REGION_SIZE;
int regionCol = col / REGION_SIZE * REGION_SIZE;
for (int i = regionRow; i < regionRow + REGION_SIZE; i++) {
for (int j = regionCol; j < regionCol + REGION_SIZE; j++) {
if (grid[i][j] == value && (i != row || j != col)) {
return false;
}
}
}
return true;
}
@Override @Override
protected void paintComponent(Graphics g) { protected void paintComponent(Graphics g) {
super.paintComponent(g); super.paintComponent(g);
// Dessiner les contours de la grille (en gras) // Dessiner les contours de la grille (en gras)
Graphics2D g2d = (Graphics2D) g; Graphics2D g2d = (Graphics2D) g;
Stroke oldStroke = g2d.getStroke(); // Sauvegarder le style de ligne précédent Stroke oldStroke = g2d.getStroke(); // Sauvegarder le style de ligne précédent
g2d.setStroke(new BasicStroke(4)); // Épaisseur de ligne de 4 pixels g2d.setStroke(new BasicStroke(4)); // Épaisseur de ligne de 4 pixels
for (int i = 0; i <= GRID_SIZE * REGION_SIZE; i++) { for (int i = 0; i <= GRID_SIZE * REGION_SIZE; i++) {
if (i % REGION_SIZE == 0) { if (i % REGION_SIZE == 0) {
g2d.drawLine(0, i * CELL_SIZE, GRID_SIZE * REGION_SIZE * CELL_SIZE, i * CELL_SIZE); g2d.drawLine(0, i * CELL_SIZE, GRID_SIZE * REGION_SIZE * CELL_SIZE, i * CELL_SIZE);
g2d.drawLine(i * CELL_SIZE, 0, i * CELL_SIZE, GRID_SIZE * REGION_SIZE * CELL_SIZE); g2d.drawLine(i * CELL_SIZE, 0, i * CELL_SIZE, GRID_SIZE * REGION_SIZE * CELL_SIZE);
}
} }
}
// Rétablir le style de ligne précédent // Rétablir le style de ligne précédent
g2d.setStroke(oldStroke); g2d.setStroke(oldStroke);
// Dessiner les cases de la grille // Dessiner les cases de la grille
for (int i = 0; i < GRID_SIZE * REGION_SIZE; i++) { for (int i = 0; i < GRID_SIZE * REGION_SIZE; i++) {
for (int j = 0; j < GRID_SIZE * REGION_SIZE; j++) { for (int j = 0; j < GRID_SIZE * REGION_SIZE; j++) {
g.setColor(Color.BLACK); g.setColor(Color.BLACK);
g.drawRect(j * CELL_SIZE, i * CELL_SIZE, CELL_SIZE, CELL_SIZE); g.drawRect(j * CELL_SIZE, i * CELL_SIZE, CELL_SIZE, CELL_SIZE);
int value = grid[i][j]; int value = grid[i][j];
if (value != 0) { if (value != 0) {
g.drawString(String.valueOf(value), j * CELL_SIZE + CELL_SIZE / 2, i * CELL_SIZE + CELL_SIZE / 2); g.drawString(String.valueOf(value), j * CELL_SIZE + CELL_SIZE / 2, i * CELL_SIZE + CELL_SIZE / 2);
}
} }
} }
} }
} }
}

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.