Rapport Interface Homme/Machine
Jeu de rôle
Licence d’informatique, troisième annéeR.Sunier & D.Sevat & R.Lacroix |
Table des matières
Ce rapport contient les informations concernant le projet de jeu de rôle. Ce projet contient une partie Jeu contenant une partie aventure, ainsi qu’une partie combat. Et il contient également un éditeur de jeu, qui permet d’éditer les cartes du jeu.
2.1 Description des classes & Diagrammes UML
Voir la partie de la documentation Html, donné en annexe.
Chaque classe possède son propre diagramme UML avec les liens possibles entre chacune des classes.
Seul petit problème, lorsqu’une classe possède en attribut une liste d’une classe, ce lien ne s’affiche pas ( par exemple, une case possède des liens vers CObjets, et vers CMonstres ).
2.2 Messages gérés & enchaînements des traitements
2.2.1 Dans la classe CProjetIHMDoc
-
OnAffichageCarte permet l’affichage de la mini carte. La boite de dialogue lié à la mini carte étant non modal, il suffit de montrer la boite, et d’y mettre le focus.
- OnAffichageInventaire permet l’affichage de l’inventaire du joueur. La boite de dialogue lié à l’inventaire étant non modal, il suffit de montrer la boite, et d’y mettre le focus.
- OnAffichagePersonnage permet l’affichage des informations du personnage. . La boite de dialogue lié aux personnages étant non modal, il suffit de montrer la boite, et d’y mettre le focus.
- OnUpdateAffichageCarte permet d’empêcher ou non le clic sur le bouton Carte du menu Affichage à l’aide d’un booléen
- OnUpdateAffichageInventaire permet d’empêcher ou non le clic sur le bouton Inventaire du menu Affichage à l’aide d’un booléen
- OnUpdateAffichagePersonnage permet d’empêcher ou non le clic sur le bouton Personnage du menu Affichage à l’aide d’un booléen
2.2.2 Dans la classe CProjetIHMView
-
FrameToView est un message utilisateur, qui permet de récupérer via la classe MainFrame ( qui récupère le message de CProjetIHMApp ), un message indiquant la touche que l’utilisateur à utiliser. Et en fonction de cette touche, on lance la fonction appropriée.
- OnButtonAvancer lorsqu’on clique sur le bouton qui possède la flèche vers le haut. On exécute la méthode pour faire avancer le joueur.
- OnButtonDroite lorsqu’on clique sur le bouton qui possède la flèche vers la droite. On exécute la méthode pour faire déplacer le joueur.
- OnButtonGauche lorsqu’on clique sur le bouton qui possède la flèche vers la gauche. On exécute la méthode pour faire avancer le joueur.
- OnButtonReculer lorsqu’on clique sur le bouton qui possède la flèche vers le bas. On exécute la méthode pour faire reculer le joueur.
- OnCtlColor permet de mettre une couleur de fond à la fenêtre principal.
- OnPaint permet de dessiner la vue 3D à chaque rafraîchissement de la fenêtre.
- OnTLeft lorsqu’on clique sur le bouton qui possède la flèche diagonal gauche, on exécute la fonction de faire tourner sur lui même le joueur.
- OnTRight lorsqu’on clique sur le bouton qui possède la flèche diagonal droite, on exécute la fonction de faire tourner sur lui même le joueur.
2.2.3 Classe CnewGame
-
OnOk permet de valider ou non la création d’un nouveau joueur. Si le joueur n’entre pas toutes les caractéristiques nécessaires alors un message lui indique ce qu’il doit faire.
- OnVScroll permet de gérer tous les boutons Cspin. C’est à dire que lorsqu’on augment d’un point une caractéristique alors on test si le joueur possède assez de point à répartir.
2.3 Descriptions des ressources
2.3.1 Le menu principal
Sous menu Fichier
Figure 2.1: Sous menu Fichier |
-
Nouveau permet la création d’une nouvelle partie.
- Ouvrir permet l’ouverture d’une sauvegarde.
- Enregistrer et Enregistrer sous... permettent de sauvegarder le jeu en cours.
- Quitter quitte l’application.
Sous menu Affichage
Figure 2.2: Sous menu Affichage |
-
Carte permet l’affichage de la mini carte.
- Inventaire permet l’affichage de l’inventaire.
- Personnage permet l’affichage des informations du joueur.
2.3.2 Boite de dialogue IDD_NEW_GAME
Figure 2.3: Boite de dialogue IDD_NEW_GAME |
Trois Combo Box pour la taille, classe, sexe.
On ajoute à l’initialisation de chacune de ces combo des noms prédéfinis.
Pour la taille, il y a 8 tailles différentes : Colossal, Gigantesque, Très Grand, Grand, Moyen, Petit, Très petit, Minuscule.
Pour classe, il existe la classe guerrier, archer, et magicien. Pour chacune de ces classes, des bonus sont attribués qui seront ajoutés au caractéristique du joueur.
Pour le sexe, il y a : Femme, ou Homme.
Cinq Cstatic associé à des Cspin. Ils servent à la gestion des points de caractéristique que le joueur doit répartir parmi sa force, dextérité, constitution, intelligence, et sagesse.
Lorsque l’utilisateur augmente une de ces caractéristiques, alors le Cstatic des points à répartir descend d’un point. Au contraire, lorsqu’il descend l’une de ces caractéristiques, la case des points à répartir augmente d’un point.
Chaque caractéristique ne peut pas descendre en dessous de 7.
Lors de l’appel du Cbutton OK, on regarde si l’utilisateur à utiliser tous ces points de caractéristiques. Si ce n’est pas le cas, on affiche un message dans une boite de dialogue.
2.3.3 Boite de dialogue IDD_COMBAT
Figure 2.4: Boite de dialogue IDD_COMBAT |
Les boutons Attaque Simple, et Attaque magique lancent les différentes fonctions d’attaques.
Le rich text edit permet de récupérer tous les messages d’informations du combat.
Lorsqu’on clique sur un bouton Radio, alors on mets à jour une variable qui indique le monstre que l’on veut taper lorsqu’on clique sur un bouton d’attaque.
Toutes les images ( image de fond, sont gérés à l’aide de la méthode Cpaint, qui redessine la fenêtre à chaque action du joueur.
2.3.4 Boite de dialogue IDD_DIALOG_INVENTAIRE
Figure 2.5: Boite de dialogue IDD_DIALOG_INVENTAIRE |
Toute cette boite de dialogue est gérée via le OnPaint de classe. On ne fait qu’afficher des icônes et une image de fond pour la boite de dialogue.
2.3.5 Boite de dialogue IDD_INFO_OBJETS
Figure 2.6: Boite de dialogue IDD_INFO_OBJETS |
Toutes les informations contenues dans cette fenêtre sont gérés par des Cstatic, englobé par des group box pour classer chaque type d’informations.
Et on mets à jour, via un pointeur sur l’objet, chaque Cstatic nécessaire.
2.3.6 Boite de dialogue IDD_CARAC_PERSO
Figure 2.7: Boite de dialogue IDD_CARAC_PERSO |
Comme pour la boite de dialogue concernant les informations d’un objet. On possède uniquement des Cstatic qu’on mets à jour en fonction des informations du joueur ( pointeur sur le joueur ).
2.3.7 Boite de dialogue IDD_DIALOG_MAP
Figure 2.8: Boite de dialogue IDD_DIALOG_MAP |
Comme pour la boite de dialogue concernant l’inventaire. Toutes la mini carte est géré par le OnPaint de la classe, qui récupère un pointeur sur la carte.
Chapitre 3 Dossier de programmation
3.1 Classes standards et spécifiques
Voir la partie de la documentation Html, donné en annexe. Pour la spécification de toutes les classes.
3.1.1 Explication de l’inventaire ( classe CinventaireF )
-
Lorsqu’on fait un clic gauche dans l’inventaire. On regarde la position ou l’on clique. Si on se trouve sur un objet de l’inventaire, ou de l’équipement :
-
On mets l’icône de l’objet à la place du curseur souris
- On mets une variable à vrai pour dire qu’on se déplace
- On note l’objet déplacer.
- On détruit l’objet de l’inventaire ou de l’équipement
- Lorsqu’on relâche le clic gauche dans l’inventaire. On regarde la position ou l’on clique :
-
Si on se trouve sur la partie inventaire, on test si la place est libre, si ce n’est pas le cas, on remets l’objet à sa place ( avec l’objet sauvegardé précédemment ). Sinon on mets l’objet dans la nouvelle case.
- Si on se trouve dans l’équipement, on test si l’objet peut être mis par le personnage, si c’est le cas, on l’équipe, sinon on le remets à sa place.
3.2 Description des gestionnaires des messages
3.2.1 Dans la classe CProjetIHMDoc
Il y a OnAffichageCarte, OnAffichageInventaire, et OnAffichagePersonnage. Pour l’affichage de ces boites de dialogue, on appel simplement la fonction qui permet de montrer la boite ( c’est à dire ShowWindow(SW_SHOW) ) et on met le focus sur cette boite avec SetFocus. Car les différentes boites de dialogue sont créées lors de la création de l’application OnUpdateAffichageCarte, OnUpdateAffichageInventaire, et OnUpdateAffichagePersonnage.
Pour griser les menus, on se sert de la fonction Enable, et d’un booléen qui gère l’état du menu.
3.2.2 Dans la classe CProjetIHMView
FrameToView
On récupère la touche appuyé qui est passé en paramètre ( qui est un WORD ). Et à l’aide d’une fonction de contrôle (switch), on lance l’action qui est en rapport.
3.2.3 OnButton... Avancer, Droite, Gauche & Reculer
On fait se déplacer le joueur en appelant des fonctions se trouvant le document. Puis au retour du déplacement, on test si la case ou il s’est déplacer contient des monstres, des objets, ou des clés. ( par l’appel des méthodes getCombat(), getClef(), et getObjets() ).
OnPaint permet de dessiner la vue 3D, pour se faire on récupère la position actuel du joueur, et voici ensuite l’algorithme utiliser (voir schéma Figure 3-1 pour mieux comprendre) :
-
on test si le joueur se trouve sur une case avec un mur (5) devant lui :
-
si c’est le cas, on l’affiche
- sinon on test si la case d’après possède un mur (10), si c’est le cas on l’affiche, sinon on ne fait rien. On test également si la case possède un mur à droite(7) et à gauche(6) si c’est le cas, on les affiches, sinon on test les murs de fond sur la droite (8) et sur la gauche (9). Si c’est le cas, on les affiches, sinon on ne fait rien.
- on test aussi, si se trouve à coté du joueur un mur droite(2) et gauche (1) :
-
si c’est le cas on les affiche
- sinon, on test s’il y a les murs droite (4) et gauche(3), si c’est le cas on les affiches sinon, il faut tester si les murs 8 et 9 sont présent.
Figure 3.1: Image pour pouvoir suivre ce qui va être fait. |
OnTLeft lorsqu’on clique sur le bouton qui possède la flèche diagonal gauche, on exécute la fonction de faire tourner sur lui même le joueur.
OnTRight lorsqu’on clique sur le bouton qui possède la flèche diagonal droite, on exécute la fonction de faire tourner sur lui même le joueur.
3.2.4 Classe CnewGame
OnVScroll permet de gérer la répartition des points de caractéristiques.
On test le SpinControl qu’on appuie, puis en fonction du spin, on regarde si l’utilisateur a augmenté ou diminué la caractéristique.
Si l’utilisateur a augmenté la caractéristiques, alors on test s’il lui reste assez des points, si c’est le cas on enlève un point à répartir.
Si l’utilisateur a diminué les points de caractéristiques, on test qu’il ne diminue pas trop la caractéristiques ( minimum 7 ), et si tout est bon, on lui ajoute un point à répartir.
Par manque de temps, il nous a été impossible de finir complètement le projet. Il y a donc quelques fonctionnalités manquantes, voir ne fonctionnant pas comme il faut.
Ce projet a été très enrichissant du point de vue de la programmation en visual c++.
Ce document a été traduit de LATEX par HEVEA