Nous allons entreprendre le deuxième travail: la conception de la première version du logiciel «client» qui permettra de se déplacer dans l'univers POQémonMD.
Vous devez concevoir l'application qui permettra de se déplacer dans l'univers POQémonMD et, d'y observer les objets et les POQémonMD qui s'y trouveront. Pour ce faire, votre application devra interagir avec le «serveur» (en l'occurrence une DLL) à l'aide de requêtes. Vous devrez également modifier légèrement votre POQédexMD (voir TP0) pour l'adapter à la nouvelle version du serveur, ainsi que pour l'intégrer dans cette nouvelle application.
L'univers POQémonMD sera éventuellement constitué d'un ensemble de régions dont la taille sera variable. Chaque région sera définie comme une grille où chacune des cases représentera une unité de déplacement. L'univers POQémonMD décrit dans cette première version du serveur ne comportera cependant qu'une région accessible (il faut bien commencer quelque part...).
Votre interface devra contenir:
Vous recevrez du serveur des informations vous permettant d'afficher le secteur qui vous entoure. Ce secteur représente une grille dont la taille est de cinq par cinq (5x5), où chaque case représente une unité de déplacement. Vous êtes toujours situé au centre de ce secteur.
Pour l'affichage du secteur nous vous proposons d'utiliser un affichage 2D avec une vue aérienne le tout implanté à l'aide d'une grille constituée de contrôles de type Picture ou Image. Vous pouvez également utiliser d'autres méthodes, par exemple affichage 3D avec vue subjective ou autre, mais ceci est tout à fait optionnel et ne vous permettra pas d'obtenir un délai de réalisation supplémentaire.
Vous devrez permettre au minimum trois déplacements relatifs:
Vous pouvez implanter d'autres types de déplacement, mais ceux-ci sont tout à fait optionnels.
Cet indicateur permettra à l'usager de connaître sa direction absolue (nord, sud, est et ouest). Vous pouvez utiliser un simple indicateur textuel ou une métaphore iconographique.
Vous devez également prévoir un ou des contrôles qui vous permettront de réaliser diverses actions. C'est à vous d'analyser la situation et d'implanter le ou les contrôles qui vous sembleront appropriés.
Pour ce projet, vous ne devrez pas utiliser un module (fichier BAS), mais plutôt utiliser un fichier de type DLL qui vous sera fourni sans frais additionnels Vous devrez simplement ajouter ce fichier au répertoire c:\windows\system de votre ordinateur.
Vous aurez également accès à des fichiers de données qui vous seront généreusement fournis par vos enseignants via le site WEB du cours.
Pour communiquer avec la base de données, vous devrez utiliser les procédures suivantes:
Vous devrez implanter le code propre au traitement de onze (11) requêtes pour faire fonctionner intégralement votre POQespaceMD.
Requête |
Description |
RQLISTEDRESSEURS |
Permet d'obtenir la liste des dresseurs disponibles côté serveur. |
RQJESUIS |
Permet au joueur ou à la joueuse de s'identifier (en tant que joueur) auprès du serveur et d'obtenir un dresseur. |
RQOUSUISJE |
Permet au dresseur de connaître la description de la zone périphérique. |
RQQUIESTLA |
Permet au dresseur d'identifier le ou les dresseurs POQémonMD se trouvant devant lui. |
RQQUESTCE |
Permet au dresseur d'identifier le ou les objets se trouvant devant lui ou elle. |
RQPOQINDEX |
Permet à notre POQédexMD d'identifier le ou les POQémonMD se trouvant devant nous. |
RQPOQINFO |
Permet à notre POQédexMD d'obtenir des informations sur POQémonMD particulier. |
RQDEPLACEMENT |
Permet au dresseur d'effectuer un déplacement ou un changement de direction |
RQPOURQUOI |
Permet au dresseur de savoir pourquoi le serveur n'a pas pu exécuter une action ou un déplacement. |
RQMAPINFO |
Permet au dresseur d'obtenir des renseignements sur la région où il évolue. |
RQSTATUS |
Cette requête de déverminage retourne la description de la dernière erreur étant survenue. |
La requête "RQLISTEDRESSEURS" permet de demander au serveur la liste des dresseurs disponibles.
La forme sera:
"RQJESUIS;ID;;" |
où "ID" est un numéro de requête unique.
La réponse à une requête "RQLISTEDRESSEURS" obéira au format suivant:
"REP;ID;Nom1;ID1;Nom2;ID2;Nom3;ID3;...;;" |
où:
Le client pourra utiliser les noms pour offrir à l'usager un choix de dresseurs, et les ID pour identifier le dresseur voulu lors d'un éventuel RQJESUIS.
Si le serveur ne peut acquiescer à la requête, alors la réponse sera:
"REP;ID;ERREUR;;" |
La requête "RQJESUIS" permet au joueur ou à la joueuse de s'identifier et de demander un dresseur particulier.
La forme sera:
"RQJESUIS;ID;Surnom;IDDresseurVoulu;;" |
où:
La réponse à une requête "RQJESUIS" obéira au format suivant:
"REP;ID;NomDuDresseur;IDDresseurAttribué;;" |
où:
"ID" sera le numéro de la requête pour laquelle vous recevez une réponse;
"NomDuDresseur" sera uen chaîne de caractères différente de la chaîne "ERREUR" et ne contenant pas de ";", représentant le nom du dresseur ayant été attribué; et
"IDDresseurAttribué" sera un entier supérieur ou égal à 1 identifiant le dresseur attribué par le serveur--si le client désire avoir à nouveau le même dresseur la prochaine fois qu'il s'y connectera, il n'aura qu'à réutiliser le même nombre lors de sa prochaine requête RQJESUIS.
Si le serveur ne peut acquiescer à la requête (le dresseur demandé n'existe pas, ou est déjà pris, ou quelque chose du genre), alors la réponse sera:
"REP;ID;ERREUR;;" |
La requête "RQOUSUISJE" sera envoyée pour obtenir les renseignements concernant la zone entourant le joueur. La forme sera:
"RQOUSUISJE;ID;;" |
où "ID" est un numéro de requête unique.
La réponse à une requête "RQOUSUISJE" obéira au format suivant:
"REP;ID;Zone;;" |
où, bien sûr, "ID" sera le numéro de la requête pour laquelle vous recevez une réponse et "Zone" sera constitué de vingt-cinq (25) entiers (16 bits chacun) séparés par des points virgules correspondant chacun à la description d'une case de la région. Les cases seront listées de haut en bas et de gauche à droite.
La requête "RQQUIESTLA" sera envoyée pour identifier le ou les dresseurs POQémonMD se trouvant devant vous. La forme sera:
"RQQUIESTLA;ID;;" |
où "ID" est un numéro de requête unique.
La réponse à une requête "RQQUIESTLA" obéira au format suivant:
"REP;ID;Info;;" |
où, bien sûr, "ID" sera le numéro de la requête pour laquelle vous recevez une réponse et "Info" contiendra une liste de chaînes de caractères correspondant au nom des dresseurs POQémonMD visibles dans votre direction actuelle. Les dresseurs apparaîtront du plus près au plus loin, de gauche à droite.
La requête "RQQUESTCE" sera envoyée pour identifier le ou les objets se trouvant devant vous. La forme sera:
"RQQUESTCE;ID;;" |
où "ID" est un numéro de requête unique.
La réponse à une requête "RQQUESTCE" obéira au format suivant:
"REP;ID;Info;;" |
où, bien sûr, "ID" sera le numéro de la requête pour laquelle vous recevez une réponse et "Info" contiendra une liste de chaînes de caractères correspondant au nom des objets visibles dans votre direction actuelle. Les objets apparaîtront du plus près au plus loin, de gauche à droite.
La requête "RQPOQINDEX" sera envoyée pour savoir s'il y a un ou des POQémonMD devant vous. La forme sera:
"RQPOQINDEX;ID;;" |
où "ID" est un numéro de requête unique.
La réponse à une requête "RQPOQINDEX" obéira au format suivant:
"REP;ID;Info;;" |
où, bien sûr, "ID" sera le numéro de la requête pour laquelle vous recevez une réponse et "Info" contiendra la liste des index des POQémonMD visibles dans votre direction actuelle. Les POQémonMD apparaîtront du plus près au plus loin, de gauche à droite.
La requête "RQPOQINFO" sera envoyée pour savoir les données propres à un POQémonMD. La forme sera:
"RQPOQINFO;ID;Index;;" |
où "ID" est un numéro de requête unique, et "Index" sera l'index du POQémonMD duquel vous voulez en savoir plus.
La réponse à une requête "RQPOQINFO" obéira au format suivant:
"REP;ID;Info;;" |
où, bien sûr, "ID" sera le numéro de la requête pour laquelle vous recevez une réponse, et "Info" sera une chaîne de caractères--qui ne sera vide que si vous avez émis une requête "RQPOQINFO" pour un POQémonMD invalide--décrivant un POQémonMD, dont le format sera:
"nom;fich;descr;type;élément;taille;poids" |
dans laquelle "nom" est le nom du POQémonMD, "descr" sa description, "type" son type, etc. Notez que "fich" sera le nom du fichier contenant une image appropriée à ce POQémonMD.
La requête "RQDEPLACEMENT" sera envoyée pour effectuer un déplacement ou un changement de direction. La forme sera:
"RQDEPLACEMENT;ID;Déplacement;;" |
où "ID" est un numéro de requête unique, "Déplacement" est soit le nombre d'unités de déplacement à effectuer dans la direction, soit un indicateur de changement de direction ("G" ou "D").
La réponse à une requête "RQDEPLACEMENT" obéira au format suivant:
"REP;ID;Combien;;" |
où, bien sûr, "ID" sera le numéro de la requête pour laquelle vous recevez une réponse et "Combien" représentera soit le nombre d'unités de déplacement réellement effectuées si dans votre requête initiale vous avez précisé un nombre d'unités de déplacement, soit une chaîne de caractères ("OK" ou "ERREUR") indiquant si le serveur a pu réaliser votre changement de direction.
La requête "RQPOURQUOI" sera envoyée pour connaître les raisons qui ont empêché le serveur de réaliser une action ou un déplacement. La forme sera:
"RQPOURQUOI;ID;;" |
où "ID" est un numéro de requête unique.
La réponse à une requête "RQPOURQUOI" obéira au format suivant:
"REP;ID;Raison;;" |
où, bien sûr, "ID" sera le numéro de la requête pour laquelle vous recevez une réponse et "Raison" sera une chaîne de caractères contenant l'explication. Si pour une raison quelconque le serveur est incapable de vous fournir une explication, "Raison" contiendra l'expression "PARCE QUE".
La requête "RQMAPINFO" sera envoyée pour obtenir des renseignements sur la région dans laquelle le joueur évolue. La forme sera:
"RQMAPINFO;ID;;" |
où "ID" est un numéro de requête unique.
La réponse à une requête "RQMAPINFO" obéira au format suivant:
"REP;ID;Nom;Largeur;Hauteur;X;Y;Direction;;" |
où, bien sûr, "ID" sera le numéro de la requête pour laquelle vous recevez une réponse, "Nom" sera le nom de cette région (une chaîne de caractères ne contenant pas le caractère «;»), "Largeur" contiendra un entier représentant la largeur totale de la région, "Hauteur" contiendra un entier représentant la hauteur totale de la région, "X" contiendra un entier représentant la coordonnée horizontale correspondant à votre position dans la région (0 à Largeur - 1),"Y" contiendra un entier représentant la coordonnée verticale correspondant à votre position dans la région (0 à Hauteur - 1) et "Direction" contiendra un caractère ("N", "S", "E", "O") représentant la direction actuelle du joueur.
Note: |
Dans notre système de coordonnées, le point 0,0 de la région se situe au coin nord-ouest de la carte. |
La requête "RQSTATUS" est une requête de déverminage vous permettant de connaître la description de la dernière erreur (habituellement une erreur dans les données fournies avec les requêtes) connue par le serveur. La forme sera:
"RQSTATUS;ID;;" |
où "ID" est un numéro de requête unique.
La réponse à une requête "RQSTATUS" obéira au format suivant:
"REP;ID;Info;;" |
où, bien sûr, "ID" sera le numéro de la requête pour laquelle vous recevez une réponse et "Info" sera une chaîne de caractères contenant l'explication.
Entreront dans les préoccupations d'évaluation les critères suivants:
À remettre le:
Amusez vous bien!