Patience, un jeu de cartes

Description

Patience, un jeu de cartes avec résolution automaique

Mise à jour de la source impossible !

Ce programme n'a rien d'original. On en trouve des versions sur tous les ordinateurs
mais la particularité de la version présente est de comporter plusieurs
jeux différents et de permettre d'en créer facilement de nouveaux.
Il est réalisé en Visual CPP avec l'atelier logiciel Microsoft Visual Studio
Community 2019. Il est conçu avec la bibliothèque MFC standard sans utiliser
l'architecture Document/Vue.

Le code présenté est largement documenté, ce qui permet, ajouté aux possibilités
de l'atelier logiciel, de comprendre assez aisément les fonctions assurées
par ce programme.

La nouvelle version est enrichie d'un programme de résolution permettant de résoudre
certains jeux. Cette possibilité est un peu gadget dans ce genre de jeu mais
les programmeurs peuvent aussi s'amuser !

Architecture de base

Le classique de l'architecture MFC permet de retrouver les classes principales
d'une application de ce type :

.CPatient, la classe d'application : C'est cette classe qui démarre
l'application (fichiers Patience.cpp et Patience.h).

.CMainFrame, la classe principale : C'est la fenêtre principale
qui supporte la fenêtre de l'application (fichiers MainFrm.cpp et MainFrm.h).

.CChildView, la classe de vue : C'est cette classe qui supporte
la fenêtre de l'application et gère l’interface avec le joueur (fichiers
ChildView.cpp et ChildView.h). Elle contient les différentes classes qui gèrent
le jeu et l'appel des différentes fonctions offertes par le menu.

Classes qui gèrent le jeu

Le jeu est construit autours d'objets : 1- les Cartes, 2- les Piles de cartes et
3- la gestion du jeu.

.Classe CCard : Supporte les cartes, l'objet CCard définit une carte
avec tous ses attributs, le champ fig définit l'image présentée soit de dos soit
de face suivant le champ hide (fichiers Card.cpp et Card.h). Cet objet comporte
aussi des pointeurs de chainage permettant de relier ensemble les différentes cartes
appartenant à la même pile ainsi qu'un champ CPoint ofs indiquant à l'affichage
la position relative de la carte dans la pile.

.Classe CPile : Supporte les piles de cartes. L'objet CPile décrit
les différentes piles de cartes et les fonctionnalités associées
(fichiers Pile.cpp et Pile.h). Des noms de types qualifient les différentes piles
(BTYPE_ENUM : Tableau, Fondation, Stock, Waste pour les principaux).
C'est aussi à ce niveau que sont traitées les règles d'échange de cartes entre
les différentes piles (possibilité de prendre une carte ou un groupe sur une pile
et de les déposer sur une autre pile). D'autres champs permettent de définir la
position de la pile sur le tapis, le nombre et la disposition des cartes.

.Classe CPlayer : Supporte toute l'organisation du jeu.
Les interactions entre les objets et le joueur sont traitées à ce niveau comme
le transport de cartes d'une pile à l'autre sous le contrôle de la souris,
ainsi que les différentes phases du jeu avec des déplacements de cartes
plus complexes comme par exemple dans les phases de distribution,
de fin de jeu ou de rejeu (fichiers Player.cpp et Player.h).

.Pile de transport : Une pile supplémentaire non cataloguée
dans les piles du jeu CPile CPlayer::m_WorkPile est utilisée pour contenir
la ou les cartes qui bougent. Elle est animée par la procédure CRect
CPlayer::MoveOneStep() qui la déplace d'un pas à chaque cycle d'horloge.
Cette procédure assure aussi l'enchainement des mouvements complexes
toujours grâce à cette pile de transport (distribution, rejeu...).
La procédure CRect CPlayer::MoveInit(...) initialise un mouvement.
Cette pile est aussi déplacée par la souris grâce à la procédure
CRect CPlayer::DragMove(...).
La souris commande aussi la capture et de déposition avec les procédures
CRect CPlayer::DragDown(...) et CRect CPlayer::DragUp().

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.