TP1--Le POQespaceMD

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.

Votre tâche

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

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...).

L'interface du POQespaceMD

Que devra contenir votre interface?

Votre interface devra contenir:

  • les contrôles permettant de visualiser la zone dans laquelle vous vous trouvez;
  • les contrôles permettant les déplacements relatifs (vers l'avant, vers l'arrière, tourner à gauche et tourner à droite);
  • un indicateur de direction (nord, sud, est et ouest);
  • un ou des contrôles permettant d'effectuer des actions telles qu'observer un objet se trouvant devant vous ou encore accéder au POQédexMD.
  • Visualisation de la zone!

    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.

    Les déplacements relatifs!

    Vous devrez permettre au minimum trois déplacements relatifs:

  • vers l'avant (avance d'une unité de déplacement sans modification de la direction actuelle);
  • tourner à gauche (on n'avance pas, mais on modifie la direction de +90°;
  • tourner à droite (on n'avance pas, mais on modifie la direction de -90°.
  • Vous pouvez implanter d'autres types de déplacement, mais ceux-ci sont tout à fait optionnels.

    L'indicateur de direction!

    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.

    Le ou les contrôles d'action!

    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.

    Mécanique d'accès au "serveur" de base de données

    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:

  • «Connecter», qui ne prend pas de paramètres et établit une connexion avec le serveur de bases de données simulé;
  • «Envoyer», qui prend en paramètre une chaîne de caractères de la forme "R;ID;D;;", où "R" est un requête (voir plus bas); "ID" est un numéro d'identification unique pour la requête (voir plus bas); et "D" représente des informations additionnelles, si nécessaire (optionnel);
  • «Recevoir», qui prend en paramètre une variable de type "String". Cette variable sera remplie par une chaîne de caractères de la forme suivante "REP;ID;D;;", où: "REP" est la chaîne de caractères "REP"; "ID" est le numéro d'identification unique de la requête pour laquelle on reçoit une réponse ; et "D" représente des informations additionnelles.
  • «SetChemin», qui prend en paramètre une variable de type String. Vous devrez mettre dans cette chaîne de caractères le chemin d'accès au répertoire qui contient vos données.
  • «GetChemin», qui prend en paramètre une variable de type String. Cette chaîne de caractères retourne le chemin d'accès actuel au répertoire qui contient les données.
  • la fonction «GetNbReponsesPretes» qui ne prend pas de paramètres et retourne un «Long», qui est le nombre de réponses que le serveur a traité et qui peuvent être reçues par le client (si elle retourne 0, le résultat d’un appel à «Recevoir» est indéfini).
  • Requêtes à implanter

    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.

    Requête RQLISTEDRESSEURS

    La requête "RQLISTEDRESSEURS" permet de demander au serveur la liste des dresseurs disponibles.

    La forme sera:

    "RQJESUIS;ID;;"

    "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;;"

    Requête RQJESUIS

    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;;"

    Requête RQOUSUISJE

    La requête "RQOUSUISJE" sera envoyée pour obtenir les renseignements concernant la zone entourant le joueur. La forme sera:

    "RQOUSUISJE;ID;;"

    "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.

    Requête RQQUIESTLA

    La requête "RQQUIESTLA" sera envoyée pour identifier le ou les dresseurs POQémonMD se trouvant devant vous. La forme sera:

    "RQQUIESTLA;ID;;"

    "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.

    Requête RQQUESTCE

    La requête "RQQUESTCE" sera envoyée pour identifier le ou les objets se trouvant devant vous. La forme sera:

    "RQQUESTCE;ID;;"

    "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.

    Requête RQPOQINDEX

    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;;"

    "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.

    Requête RQPOQINFO

    La requête "RQPOQINFO" sera envoyée pour savoir les données propres à un POQémonMD. La forme sera:

    "RQPOQINFO;ID;Index;;"

    "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.

    Requête RQDEPLACEMENT

    La requête "RQDEPLACEMENT" sera envoyée pour effectuer un déplacement ou un changement de direction. La forme sera:

    "RQDEPLACEMENT;ID;Déplacement;;"

    "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.

    Requête RQPOURQUOI

    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;;"

    "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".

    Requête RQMAPINFO

    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;;"

    "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.

    Requête RQSTATUS

    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;;"

    "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.

    Évaluation

    Entreront dans les préoccupations d'évaluation les critères suivants:

  • implantation correcte de l'émission des requêtes;
  • implantation correcte de la réception et du traitement des réponses;
  • ergonomie propre à l'application (disposition des contrôles, choix des contrôles, etc.);
  • algorithmique (l'application réagit correctement selon les circonstances);
  • programmatique (indentation, commentaires, caractère significatif de la nomenclature choisie pour les sous-programmes, les variables et les constantes, etc.);
  • robustesse de l'application;
  • respect général des consignes.

  • À remettre le:


    Amusez vous bien!