Bonjour,
Je vous propose un nouvel élément à utiliser : Puzzle, un jeu de patience
Ce programme est réalisé avec l'atelier logiciel Microsoft
Visual Studio Community 2019 et utilise la bibliothèque
MFC standard et son architecture Document/Vue.
L'originalité est d'afficher une première fenêtre comportant
deux Views de type Windows Explorer et une deuxième fenêtre
type ScrollView multiple montrant les différents puzzles en cours de résolution.
Le code présenté, largement documenté, permet,
ajouté aux possibilités de l'atelier logiciel, de comprendre
assez aisément les fonctions assurées par ce programme.
Structure du programme
Classiquement la classe CPuzzleApp dérivée de CWinAppEx, contenue
dans les fichiers Puzzle.h et Puzzlz.cpp
démarre le programme et assure les initialisations et définit les deux 'templates'
composant les fenêtres Explorateur et Puzzle de l’application.
Une classe CDocManagerEx dérivée de CDocManager, contenue
dans les fichiers DocManagerEx.h et DocManagerEx.cpp
assure l’aiguillage des requêtes vers le bon 'template' en fonction des types des fichiers :
- Les dossiers sont dirigés vers l'Explorateur,
- les fichiers sont dirigés vers le traitement du Puzzle, ne retenant que les
extensions *.bmp, *.jpg, *.gif, *.wmf et *.emf correspondant à des images
et *.puz spécifique à un Puzzle en cours, déjà sauvegardé sous cette forme.
La classe CMainFrame dérivée de CMDIFrameWndEx assure la classe principale,
contenue dans les fichiers MainFrm.h et MainFrm.cpp.
Elle contient les fonctions communes.
Première fenêtre : Windows Explorer
Classiquement, ses deux Views sont gérées grâce à une classe CSplitterWndEx
placée dans la classe CMenuFrame (dérivée de CMDIChildWndEx), contenue dans
les fichiers MenuFrm.h et MenuFrm.cpp.
Elle supporte les classes CLeftView (dérivée de CTreeView) et
CMenuView (dérivée de CScrollView), contenues dans les fichiers
LeftView.h, LeftView.cpp,
MenuView.h et MenuView.cpp.
Cette construction peut surprendre, mais l'utilisation des classes
CMFCShellTreeCtrl et CMFCShellListCtrl
assurent les fonctions d'exploration de fichiers et simplifient la programmation.
De plus une Clist mémorisant les imagettes permet de compléter
la présentation des différentes images contenues dans le dossier exploré.
La classe CMenuDoc dérivée de CDocument complète la structure, contenue
dans les fichiers MunuDoc.h et MenuDoc.cpp.
Deuxième fenêtre : le Puzzle
La partie Puzzle est composée des classes suivantes formant le classique du 'template' d'affichage :
- La classe CPulzzeView dérivée de CSCrollView, contenue dans les
fichiers PuzzleView.h et PuzzlzView.cpp,
- la classe CPuzzleFrame dérivée de CMDIChildWndEx, contenue dans
les fichiers PuzzleFrm.h et PuzzleFrm.cpp,
- la classe CPuzzleDoc dérivée de CDocument, contenue dans les
fichiers PuzzlzDoc et PuzzlzDoc.cpp,
La dernière classe nommée utilise la classe CPuzCtrl, contenue
dans les fichiers PuzCtrl.h et PuzCtrl.cpp,
pour toutes les fonctionnalités du jeu. Le paragraphe suivant lui est réservé.
Fonctionnalités du jeu : Classe CPuzCtrl
C'est cette classe qui gère toutes les opérations du jeu.
Une instanciation de cette classe est créée pour chaque nouveau Puzzle traité.
Les opérations du découpage de l'image en pièces au mélange puis à l'affichage sont assumés par le code de cette classe.
Cette classe assure aussi le mouvement des pièces avec la souris ou lors de la résolution automatique.
Des structures principales contiennent les informations nécessaires à son fonctionnement :
- HBITMAP m_hBm la bitmap contenant l'image du Puzzle en cours.
- PVOID m_pData des informations supplémentaires de la bitmap.
- CSize m_size, m_puzSize les dimensions en pixels de l'image
utilisée pour le Puzzle.
- struct t_PIECE : définit pour chaque pièce du Puzzle
la position initiale, un numéro, des chaînages matérialisant un ordre
d'affichage et le collage de pièces.
- Table t_PIECE* m_pPieces : regroupe dans une même structure toutes
les pieces composant le Puzzle.
WORD m_nx, m_ny : le nombre de pièces dans les deux directions.
- CList m_anim : contient un pointeur vers chaque pièce en mouvement.
- CString m_pictPath : nom du fichier complet contenant l'image du Puzzle.
- CString m_puzzPath : nom du fichier *.puz contenant le descriptif du Puzzle.
- TCHAR m_puzzFolder[MAX_PATH] : nom du dossier en mémoire locale où
sont placés les dossiers descripteurs de Puzzle.
- CPuzCtrl* m_pPuzFirst, *m_pLink : un système de chaînage des classes
CPuzCtrl permettant de chaîner les classes CPuzCtrl
et retrouver tous les Puzzles en mémoire.
Ces structures sont complétées par des variables gérant les différentes variables de la classe.
Utilitaires
Des classes auxiliaires assurent des fonctions annexes comme par exemple
les boites de dialogue :
- Classe CNotesDlg dérivée de la Classe CFrameWnd,
affiche les notes éventuelles attenantes aux images, rédigées en html.
Elle est aidée de la classe incluse CNotesView
dérivée de la classe CHtmlView, le tout contenu dans les fichiers
NotesView.h et NotesView.cpp.
- Classe CModel dérivée de CWnd, affiche
l'image modèle du Puzzle en cours, contenue dans les fichiers
Model.h et Model.cpp.
- BitmapRW.h BitmapRW.cpp : Ces fichiers contiennent
des fonctions assurant le traitement des images et quelques fonctions annexes.
- Classe CColorsDlg : Assure le dialogue
permettant de modifier les couleurs du Puzzle, contenu dans les fichiers
ColorsDlg.h et ColorsDlg.cpp.
- Classe COptionsDlg : Assure le dialogue
permettant de modifier les différentes options du jeu, contenu dans les fichiers
OptionsDlg.h, OptionsDlg.cpp,
Options.h et Options.cpp.
- Classe CHelpDlg :Assure l'affichage du mode
d'emploi de ce jeu, contenu dans les fichiers :
HelpDlg.h, HelpDlg.cpp
et HMenu.h qui contient seul les définitions
spécifiques de l'application.
Qu'en pensez-vous ?
Partager