Après avoir étudié sur le papier le plan et le scénario de l'aventure, nous allons entrer de plein pied dans le vif du sujet. Nous allons nous reporter, pour l'étude de Colditz, au listing paru dans le numéro 7 de CPCNous allons, dans un premier temps, créer la liste des emplacements et des objets (voir tableaux 1 et 2). Les emplacements sont décrits dans les datas des lignes 3110 à 3330. On voit, à la suite de chaque emplacement, la liste des directions possibles présentée sous forme compactée. SU signifie que l'on peut aller au sud, NOSUOU donne la possibilité de se déplacer vers le nord, le sud et l'ouest. Les étoiles indiquent qu'il est impossible de sortir de la salle de garde ; effectivement, si le hasard vous pousse dans cette pièce, vous êtes capturé par les gardes ! La mise en tableau de toutes ces données se fait à la ligne 170. Les emplacements sont stockés dans la variable E$(n) et les directions possibles dans la variable D$(n) où n indique le numéro de la pièce. Ainsi, si après un break vous tapez : PRINT E$(7), D$(7), vous obtiendrez : dans un garage, SUOU. Le nombre d'emplacements étant supérieur à 10, on voit qu'il a été nécessaire de dimensionner E$ et D$ en ligne 20. Pour 20 emplacements, DIM E$(20), D$(20) aurait été suffisant. Maintenant que le plan du château est mémorisé dans un tableau, nous allons réitérer la même opération pour la liste des objets que l'on trouve dans les datas des lignes 3310 à 3410. Après chaque objet, nous trouvons un chiffre qui indique dans quel emplacement se trouve l'objet. Ouvrons ici une petite parenthèse pour expliquer le rôle du zéro que l'on trouve après certains objets. Ce 0 signifie que l'objet n'est pas apparent. Par exemple, la grosse clé ne devient visible que quand le coffre est ouvert. La ligne 200 définit le nombre d'objets 0 à 34 et charge les objets dans le tableau O$(n) et l'emplacement des objets dans le tableau EO(n). Ici encore, on voit que ces tableaux ont été dimensionnés en ligne 20. Après un break, il est possible de vérifier le contenu de ces tableaux en tapant, par exemple, Print 0$(10), E0(10), ce qui donne un saucisson, 6. En effet, en consultant le plan du château, on voit bien que le saucisson se trouve bien dans les cuisines et que les cuisines constituent la pièce n° 6. L'ANALYSEUR DE SYNTAXE L'analyseur de syntaxe est le cœur de tout jeu d'aventure. De ses performances dépend l'intérêt du jeu. Celui que nous avons développé pour Colditz se comporte très honorablement, c'est-à-dire qu'il fournit une réponse cohérente, même quand les ordres qui lui sont données sont absurdes. Comment est-ce possible ? Traditionnellement, depuis l'avènement des aventures de Scott Adams sur TRS 80 et Apple II (presque 10 ans déjà), les ordres sont donnés sous la forme d'un verbe et d'un complément. Exemple : ASSOMMER GARDE. L'analyseur de syntaxe va détecter le verbe en prenant les 4 premiers caractères de l'ordre à l'aide de la commande LEFT$(4). L'ordre est maintenant sous la forme : ASSOMMER GARDE. II faut ensuite rechercher le complément. Nous allons poser un pointeur sur le dernier caractère de l'ordre, c'est-à-dire le E de GARDE. Puis, nous allons, à l'aide d'une boucle, déplacer le pointeur vers la gauche jusqu'à ce que l'on rencontre un espace qui sépare le verbe du complément. A partir de là, nous allons prélever les trois caractères situés à droite de l'espace. Notre ordre est maintenant sous la forme : ASSOMMER GARDE et on voit bien comment ont été prélevés le verbe et le complément. L'expérience montre que 4 caractères significatifs sont suffisants pour le verbe et 3 pour le complément. Si une ambiguité entre deux verbes ou compléments d'origines voisines subsiste, rien n'interdit de prendre plus de caractères. Nous avons complété l'analyseur pour traiter des phrases comportant une apostrophe comme par exemple BOIRE DE L'EAU, ceci de manière très simple : le pointeur dont nous venons de parler s'arrête sur l'espace ou l'apostrophe qu'il rencontre en se déplaçant vers la gauche, ce qui donne : BOIRE DE L'EAU. Eut égard à la complexité de la langue française, ce principe est très performant car il permet à l'analyseur de comprendre des phrases complexes telles que : ASSOMMER VIOLEMMENT LE GROS GARDE ou bien BOIRE UN PEU D'EAU. Maintenant que nous savons comment prélever les informations essentielles de l'ordre donné, nous verrons dans le prochain numéro comment les traiter convenablement. A bientôt. Tableau 1 | x | E$(x) LISTE DES EMPLACEMENTS | D$ DIRECTIONS | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | Dans un cachot abandonné Sur le chemin de ronde au nord du château Dans le bureau du géolier Dans la cellule des condamnés à mort Dans un long couloir sombre et humide Dans les cuisines des prisonniers Dans un grand garage Dans la chapelle du château A l'entrée de la sinistre forteresse de Colditz Devant la Kommandantur Sur le parking de la forteresse Dans la réserve de bois de chauffage Dans la salle de garde Dans le bureau du commandant du camp Dans une petite cour intérieure Dans une ancienne écurie du château A l'infirmerie Dans la salle de torture Dans un corridor Dans un escalier en très mauvais état | SU SU ES SU OU SU NO ES SU OU NO SU NO ES OU ES NO SU OU NO SU * * NO SU OU NO NO ES NO OU OU EST NO OU |
Tableau 2 | x | O$(x) LISTE DES OBJETS | EO(x) Emplacement | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 39 30 31 32 33 34 | Un petit morceau de papier Une sentinelle endormie Un trousseau de clés Une armoire Un message collé sur la porte Un prisonnier assoiffé Une formule Une trappe fermée par une chaîne Un bidon vide Un saucisson Une malle en osier Un vieux plan du château Une barre de fer Une corde Un cierge Un garde qui patrouille Une immense grille Une porte en bois sculpté avec trois serrures Un camion militaire Une fontaine Une grosse pince coupante Du bois 5 soldats allemands Un coffre-fort Une grosse clé Un passe-partout Un râtelier à fourrage Des anneaux au mur Une herse qui bloque l'issue au sud Une lampe Un bureau métallique Un tiroir Un poignard Une plaque de tôle fixée par un cadenas | 1 2 2 3 0 4 0 0 6 6 7 0 7 8 8 9 9 10 11 11 0 12 13 14 0 0 16 16 16 17 18 0 0 18 |
|