IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

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.

Developpez.com décline toute responsabilité quant à l'utilisation des différents éléments téléchargés.