Bonjour tout le monde,
Je suis un debuatant en programmation java je suis entrain de faire un programme sudoku, mais je suis arrive dans un ou je ne peux pas continuer je demande votre s'il vouplait. Voici l'enonce:
Problématique
Vous poursuivez le mandat qui vous a été confié par la directrice de l’école Saint Pruneau, soit la conception d’un jeu de Sudoku. Dans ce mandat particulier, vous aurez à concevoir les classes associées au jeu de Sudoku et les méthodes qui s’y réfèrent, permettant d’accéder aux données de la grille, la manipulation de la grille et la validation d’une solution. Le fichier/classe tp2.java permettant de démarrer le logiciel devra se nommer tp4.java.
Dans le cadre de ce travail pratique, vous aurez en prendre un certain nombre de décision dans la conception des classes, soit : Quelles méthodes doivent être abstraite ou non? À quel niveau doit se situer l’implémentation finale du code? Quel type de polymorphisme doit être utilisé? Veuillez utiliser les commentaires dans le code, pour justifier vos choix de conception pour chaque méthode créée !
1.Créer des classes
Le programme devra être développé autour de plusieurs classes soit :
1.tn4.java permettant de démarrer le programme. Cette classe aura une méthode main qui devra faire comme actions :
1.Créer une instance de la classe Sudoku9x9;
2.Imprimer la grille de Sudoku original;
3.Imprimer le degré de difficulté de la grille;
4.Effectuer 10 placements;
5.Imprimer la grille de Sudoku suite aux placements;
6.Annuler 2 placements;
7.Imprimer la grille de Sudoku suite à l’annulation;
8.Valider la solution et imprimer le résultat de la validation.
2.Sudoku.java, une classe abstraite représentant la notion abstraite de grille de Sudoku et des méthodes communes à tous les sous-types de grille de Sudoku. Elle aura donc comme attribut :
1.Une matrice de nombre entier (int[][]) représentant la grille de Sudoku
2.Une liste d’action de placement (Une ArrayList de classe Placement (voir plus bas))
3.Le degré de complexité de la grille (int)
4.L’attribut placement (int) indiquant le nombre de chiffre restant à placer dans la grille
Elle aura comme méthodes abstraites ou non :
1.Initialiser une grille
2.Réinitialiser la grille (revenir à la grille de Sudoku originale) à l’aide de la liste de placements effectués. Vous devez concevoir la solution par vous-même!
3.Tester la validité de la solution (voir code en annexe)
4.Faire un placement (voir plus bas au point 5)
5.Annuler un placement (voir plus bas au point 5)
6.Méthodes get et set pour accéder aux attributs de classes (attention à la visibilité des méthodes, c.a.d. public, private, protected).
7.Imprimer la grille
1.Sudoku9x9.java, une sous-classe de Sudoku.java qui implémente les méthodes spécifiques à un Sudoku9x9, soit :
1.Les sous-implémentations des méthodes abstraites de la classe Sudoku.java
2.Toutes autres méthodes nécessaires pour effectuer le mandat
2.Case.java, une classe représentant une case de la grille. Cette classe sera utilisée par la méthode placement et annuler placement afin de garder un trace des actions sur la grille de jeu. À vous de déterminer quels sont ces attributs et méthodes pour répondre aux besoins de la problématique. À vous également de spécifier sa visibilité et de la justifier.
1.Créer des appels de méthodes
Au travers de votre conception orientée-objet, répondant à la problématique, les différentes instances de classes auront à interagir entre elles. Elles s’échangeront des appels de méthodes permettant de répondre aux besoins du mandat, soit (rappel du comportement de la classe tn4.java) :
1.Créer une instance de la classe Sudoku9x9;
2.Imprimer la grille de Sudoku original;
3.Imprimer le degré de difficulté de la grille;
4.Effectuer 10 placements;
5.Imprimer la grille de Sudoku suite aux placements;
6.Annuler 2 placements;
7.Imprimer la grille de Sudoku suite à l’annulation;
8.Valider la solution et imprimer le résultat de la validation.
1.Faire et annuler des placements
Grâce à la classe Case, il est possible de sauvegarder une trace des actions du joueur sur la grille. À l’aide de la méthode, fairePlacement, vous aurez à (1) effectuer le placement sur la grille; (2) sauvegarder le placement (c’est à dire l’instance de la classe Case) dans un structure de type ArrayList..
À l’aide de la méthode annulerPlacement, vous aurez à (1) récupérer la dernière instance dans l’arraylist (en utilisant la méthode remove et la méthode size pour connaître le nombre d’élément) et (2) annuler le placement dans la grille.
Pour plus d’information sur les ArrayList, aller à la page : http://docs.oracle.com/javase/7/docs...ArrayList.html (en anglais seulement).
1.Code de validation de la grille Sudoku
Merci de corriger pour moi.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36 public boolean validate() { // un tableau : int[][] board = new int[9][9](); // initialisation et actions sur le Sudoku //Vérifie les lignes et les colonnes for (int i = 0; i < board.length; i++) { BitSet bsRow = new BitSet(9); BitSet bsColumn = new BitSet(9); for (int j = 0; j < board[i].length; j++) { if (board[i][j] == 0 || board[j][i] == 0) continue; if (bsRow.get(board[i][j] - 1) || bsColumn.get(board[j][i] - 1)) return false; else { bsRow.set(board[i][j] - 1); bsColumn.set(board[j][i] - 1); } } } //Vérifie les quandrans (3x3) for (int rowOffset = 0; rowOffset < 9; rowOffset += 3) { for (int columnOffset = 0; columnOffset < 9; columnOffset += 3) { BitSet threeByThree = new BitSet(9); for (int i = rowOffset; i < rowOffset + 3; i++) { for (int j = columnOffset; j < columnOffset + 3; j++) { if (board[i][j] == 0) continue; if (threeByThree.get(board[i][j] - 1)) return false; else threeByThree.set(board[i][j] - 1); } } } } return true; }
Au plaisir de recevoir votre solution.
Merci d'avance a tout un chacun
jsylvestre.
Partager