Bonjour,
J'ai pour petit projet de concevoir un sudoku via Qt. Ceci est une excuse pour "réviser" un peu mes connaissances sur Qt et aussi un peu du C++ ^^'
J'ai donc choisi d'utiliser le model MVC pour structurer la grille et l'affichage de la grille (le tout viendra s'adapter dans une interface plus complexe).
J'ai donc dans l'idée de créer un nouvelle objet de vue et un nouveau model.
Seulement, j'ai encore quelques question et j'aurais aimer avoir l'avis d'autres développeur sur la façon dont je compte structurer tout ca.
Voila ma vision des choses :
Une classe SudokuData qui encapsule une sorte de std::vecteur<bool> de dimension w*h*9(car il faut gérer la possibilité de stoker plusieurs choix pour une case de sudoku, jusqu'à 9). Cela signifi que pour la case i,j on peut savoir si le chifre n(0 < n < 10) est oui ou non un choix de l'utilisateur. Une case vide a donc Sigma(n_i) = 0, et une case a un choix Sigma(n_i)=1. En réalité je compte l'implémenter sous forme d'un std::vecteur<short int> de w*h et utiliser des masques binaire (un short int étant sur 16 bits, j'ai bien la place de stoker mes 9 bits de bool et même un 10ème bit pour savoir si c'est un champ compléter par l'utilisateur ou bien de la grille d'origine ^^)
Une classe SudokuModel qui permet d'accéder à un index via i,j et a pour fils une liste des nombres de la cellule (liste vide = cellule vide, liste a un element = 1 seul choix)
Une classe SudokuVue qui affichera un mag'nifik' tableau de 9*9 joliment découpé, extensible, etc etc, et qui bien sur affichera dans un case jusqu'à 9 chiffre en petit, ou un seul en gros [détail extrêmement utile pour ce message, je le conçoit]
Ensuite, vien la question de la vérification de validitée, et de la résolution de la grille. Pour des raisons de rapiditées, ces manipulations ne peuvent se faire que dans la classe SudokuData. La question est, comment devront-elle être appeler par la vue?
Première solution : Directement sur la classe SudokuData (bof bof)
Seconde solution : Sur la classe SudokuVue qui feras un appelle à SudokuData.(Mieu) [Avec/Sans conenction Signal/Slot]
Troisième solution : On connecte un composant de vue avec son signal sur un slot de SudokuVue qui lui même appelle une fonction de SudokuModel et s'occupe des appelles à SudokuData. (Solution que je préfère)
Pour l'appelle de SudokuModel->SolveGrid() par SudokuVue, vous voyez ça comment, simplement un "SudokuModel->SolveGrid()" dans le code de SudokuVue ou via signal/slot?
Voila, au plaisir, Eagle.
Partager