CODING ★ AVENTURES AVANT TOUT (III) ★

Aventures avant tout III (ACPC n°15)
Avant tout un très gros pardon pour l'infâme coquille qui a osé se glisser dans le numéro précédent. Jusqu'à présent je pensais que le Melini était une exclusivité du Melini Comix Band, et bien non, à la maquette, ils connaissent aussi (Melini aussi, sur un air bien connu).

Pour tout réparer, prenez votre Cent Pour Cent du mois d'avril, on peut y lire, lors du test NSEO(CASE), pour l'ouverture à l'ouest “Si NSEO (CASE)<>0”, qu'il faudra comprendre “Si NSEO(CASE) AND 8 <>0”. Dieu seul sait où est passé le “AND 8”. Pour le reste, les paragraphes se sont mélangés les pieds et, manifestement, les maquettistes ont voulu faire de l'article un jeu de Taquin. En lisant les lignes dans le désordre, vous pourrez peut-être comprendre ce que j'essayasse de vous dire.

Je me souviens, lors de ma période prénatalo-informaticienne, quand je n'étais encore qu'un minuscule fœtus au sein de mon VG-5000 où tous les rêves m'étaient permis, même ceux d'affronter le monde merveilleux des CPC. Dans ce temps-là, je me posais beaucoup de questions du type “et comment ça marche un ordinateur qui comprend ce que je dis ? Heu, dis-le-moi, allez...” Eh ben il n'y avait pas, à l'époque, de gentils Poum ou Sined pour apporter une réponse claire à mes questions qui ne l'étaient pas pour moi.

Une dépêche de dernière minute m'apprend que l'on peut trouver des trucs et bidouilles assez sympa dans un petit fanzine nommé Syntax Error. Procurez-vous-le, no di dieu c'est gratos. Pendant que j'y suis, encore une toute petite parenthèse, devinez qui, en ce moment même, est à côté de moi en train de faire 247 “CLS” par minute ? Vous ne voyez pas ? C'est notre très cher Robby, libéré pour quelques jours par l'armée et c'est tant mieux.

AUJOURD'HUI SPEEDONS

Speedon car une doubl pag sera peut-êtr (j'économise des lettres) un peu just (lire djeust). Nous attaquons ce mois-ci notre premier vrai et grand listing (l'analyseur de syntaxe, bien sûr), écrit sous Basic pour avoir des explications plus claires. Evidemment, on perd en vitesse d'exécution, mais, voyant ce que font certains professionnels en Assembleur (dans des jeux d'aventures que je ne citerai pas), il me semble qu'il serait bien d'expliquer ce type de routines.

C'EST PARTI MON KIKI

Vous voyez ce petit listing de quelques lignes Basic ? C'est un analyseur de syntaxe. Il fait la saisie de votre phrase sur l'écran (sans INPUT) ; on supprime donc toutes les touches inutiles du type chiffres et ponctuations. “Stop, me crie Sined, tu vas trop vite, commence par le début...”

OK ! Un analyseur de syntaxe est une routine (bout de programme) qui va prendre une phrase entrée au clavier et chercher dans cette même phrase quel est le verbe, l'objet et éventuellement un complément. Pour ce qui nous concerne, nous nous contenterons du verbe et de l'objet.

Jetez un œil sur les lignes 130 à 140, ce sont les verbes ; de 180 à 190, ce sont les objets. Commençons par les verbes. Plusieurs verbes sont stockés sur les lignes DATA, séparés par des virgules, jusqu'ici c'est clair. De temps en temps, on voit un petit (qu'est-ce que c'est, dis ? dit Sined), qui représente la séparation entre les synonymes. Les trois premiers verbes sont PRENDRE, VOLER et DEROBER (ils sont en majuscules et écrits de façon incomplète, mais c'est fait exprès). Ensuite, il y a la petite étoile suivie de trois autres verbes qui représentent l'action de donner, une autre étoile et deux verbes qui signifient fouiller, etc. Tout à la fin, on met deux étoiles qui veulent dire que c'est la fin de la liste des verbes. Compris ?

DECORTIQUONS LE LISTING

En ligne 210, on initial ise la variable VERBE et OBJET qui prendront, à la sortie du sous-programme de l'analyseur, une valeur qui correspondra au numéro du synonyme. Dans notre exemple, si le verbe entré au clavier est PRENDRE, VOLER ou DEROBER, à la sortie, VERBE sera égal à 1, idem pour OBJET.

Sur la ligne 230, le X est la colonne sur laquelle sera positionné le curseur de saisie et le 'Y' est le numéro de la rangée. Donc tous deux modifiables, pour les valeurs X=1 et Y=1 le curseur débutera la phrase en haut à gauche de l'écran, 'LMAX' est la longueur maximale autorisée pour la phrase, en l'occurrence 38 dans notre exemple. Enfin, 'PH$' est la variable qui contiendra la phrase entrée par le joueur au clavier.

En 240, on efface l'ancienne phrase qui était sur l'écran et qui ne sert plus à grand-chose, en affichant une série d'espaces.

A la ligne 280, 'A$' prendra la valeur Ascii de toutes les touches appuyées sur le clavier et par un petit UPPER$' les transformera si possible en majuscules. Le 'XOR' appliqué à la variable 'CUR' m'amuse beaucoup car il évite un test du genre 'CUR=CUR+ 1:IF CUR=2 then CUR=0'. Ensuite, on affiche une fois sur deux un espace à l'emplacement du curseur et, la fois suivante, on affiche le caractère Ascii de (32+13) le 45 dans ce cas (en modifiant le 13, vous pourrez afficher n'importe quel caractère, même un que vous aurez redéfini par la commande 'SYMBOL').

En ligne 300, on branche le programme sur la ligne 480 pour le traitement du retour chariot, en ligne 420 pour la touche Del, en 360 pour l'espace. Puis on teste de nouveau le clavier si la touche enfoncée n'est pas une lettre.

ALORS CA SUIT ?

Si, arrivé en 360, on n'a plus de place sur la ligne de saisie (LONG= LMAX), on recommence le tout en attendant le retour chariot ou la touche Del qui effacera le dernier caractère saisi au clavier. On affiche en ligne 370 la lettre ainsi testée, suivie d'un petit son pour faire bien, la lettre s'ajoute en 390 à la phrase et la longueur totale de la phrase est incrémentée, puis on reboucle tout le bloc de saisie.

EFFACE-MOI CETTE INFAMIE

Tiens j'ai déjà vu ça quelque part. Le bloc des lignes 420 à 460 efface la dernière lettre de la phrase à condition que la longueur soit différente de zéro. C'est normal, je ne vois pas comment on pourrait effacer une lettre qui n'existe pas et je vous assure que si on ne prévient pas le CPC de la présence d'une phrase vide, il essaiera malgré tout d'effacer quelque chose.

Mon dieu, plus ça va et plus la place réservée pour nous ce mois-ci diminue, je vais essayer de faire très vite. Barbarian II est un jeu assez remarquable dans les mains d'un expert comme Matt Murdock, Septh se défend pas trop mal non plus et j'attends avec impatience de voir le Barbare de service à l'action (où suis-je, qui suis-je, m'égare-je ? oui-je tu t'égare-je bien la France).

En deux mots, de 530 à 580, on recherche dans les DATA enfermant dans leur royaume sacré nos très chers verbes. En les lisant, on compte le nombre d'étoiles qui, en sortie, sera le numéro du synonyme. Si le mot est trouvé, on arrête de chercher bêtement et on enchaîne sur les objets qui reprennent le même principe, à la différence près que le 'RESTORE' pointe sur les DATA contenant les objets au lieu de ceux contenant les verbes, et en sortie, ce n'est pas la variable VERBE' qui sera égale à 'TROUV' mais la variable 'OBJET.

Tiens, à propos, de 700 à 750 on fait kôa ? C'est évident voyons, on dit que 'TROUV=0' (en français, je n'ai rien trouvé), puis si le mot lu dans la phrase a une longueur égale à zéro, on laisse tomber, sinon on lit les DATA. On teste la fin du bloc de mots avec les '**' et les blocs par '*'.

TROP SIMPLE MAIS TROP NEGLIGE

La dernière ligne, qui est la ligne 750, est vraiment trop bête, mais elle rend un sacré service au joueur. Elle teste si le mot lu dans les DATA est identique, non pas à celui écrit sur l'écran, mais à sa partie de gauche de même longueur, ce qui permet d'oublier les 'S' et de se tromper dans les terminaisons. En deux mots, faire quelques fautes d'orthographe, c'est cool, non ? Et dire qu'il y a des programmeurs qui n'en tiennent pas compte (honte à eux). ,

Une bonne nouvelle, notre Pierre adoré vient de m'autoriser un débordement d'une page pour ce mois-ci, ce qui m'arrange bien et je remercie par la même occasion notre trop belle Miss X qui par son charme n'est pas étrangère à cette décision (je l'ai dit). '

LE PLUS GROS EST PASSE

Mais non pas Lip, je veux dire que désormais avec ce que nous avons vu ensemble, vous pouvez très sérieusement (du moins je l'espère) commencer à écrire votre jeu d'aventures.

Vous avez un plan, ainsi que toutes les directions dans lesquelles le joueur peut se déplacer ; vous savez également qu'il y a certains endroits momentanément bloqués, qui, par une action quelconque, pourraient s'ouvrir pour permettre une avancée inaccessible au préalable. On peut également bloquer le joueur s'il commet l'erreur qu'il ne devait pas commettre. Tous les déplacements sont dictés à partir du clavier, ceci avec l'aide de l'analyseur de syntaxe (dans lequel figureront, bien sûr, les quatre directions cardinales nord, sud, est et sans oublier l'ouest).

L'analyseur, pour les très rares personnes qui ne l'ont pas remarqué, s'appelle par un 'GOSUB 230', dans le cas de notre listing bien sûr. S'il est ; 'RENOMEr', dieu sait en quelle ligne sera métamorphosée la ligne 230. Au retour, nous aurons deux variables "VERBE' et 'OBJET' qui seront égales à des valeurs allant de zéro à... Si la variable 'VERBE' est égale à zéro, c'est que le verbe entré au clavier ne fait pas partie des verbes prévus par le programmeur (c'est vous), de même pour les objets.

A GO, A GOGO , ALGO

L'algorithme de l'ensemble du jeu pourrait avoir, si vous n'y voyez pas trop d'inconvénient, l'allure qui suit :

  1. On initialise toutes les variables. puis on affiche le premier dessin.
  2. On entame une boucle qui va boucler (eh oui, si une boucle ne boucle pas, je ne vois pas qui pourrait boucler à sa place) sur l'ensemble du programme en commençant par l'analyseur, que l'on appellera par un 'GOSUB son numéro de ligne'.
    Dès le retour du programme, on teste la variable 'VERBE'. S'il s'agit d'une direction, on branche le programme sur la partie qui gère les déplacements (nous l'avons vu le mois dernier), si le déplacement est possible, on modifie la variable 'CASE', et en fonction de celle-ci, on va chercher sur le disque l'image qui lui correspond (ça, ce sera pour plus tard). Enfin, on affiche cette image. Si le verbe n'est pas une direction, on reste toujours dans le bloc de programme qui gère des cas que je nommerais Généraux, qui sont des actions du type 'PRENDRE', 'POSER', 'INVENTAIRE' pouvant être valables dans toutes les cases (si vous acceptez que le joueur prenne un objet dans une case, je ne vois vraiment pas pourquoi il ne pourrait pas le poser ailleurs, ce qui est malheureusement le cas de certains jeux que, encore une fois, je ne nommerai pas). Ensuite, si tous les tests que nous venons de faire restent sans résultats, on envisagera la possibilité que l'action est peut-être spécifique à la case dans laquelle le joueur est bloqué depuis trois jours et deux nuits, et on avise. Si toutefois la réponse à nos tests reste toujours négative...
  3. ...De deux choses l'une, ou on place à l'écran un phrase bateau du type 'IMPOSSIBLE' ou encore plus bateau du type 'NON', ce qui est bien pratique, mais a le seul avantage d'être peu gourmand en mémoire. En se donnant un peu de peine et en sacrifiant un peu de place mémoire, on peut prévoir une réponse, même courte, à chaque verbe. Par exemple pour 'PRENDRE', vous pourrez dire 'PAS TOUCHE' ou TOUCHE A LA PARTIE CHARNELLE SUR LAQUELLE TU T'ASSOIS'. Idem pour les autres verbes, ce qui donnerait un peu plus de vie et de chaleur à votre jeu, non ?

Allez les potosses (c'est du Sined), il me vient l'envie de PC et CPC, or donc (c'est du Septh), j'y cours car y'en peux puuuuu.

Aaaah. Pour conclure comme à l'accoutumée, Amousse me chuchote une maxime, la voici car elle est très courte : “Aime ta mère car c'est la seule femme qui t'aimera...!” Là, moi, pas trop comprendre, car ceci dépasse peut-être un peu mon savoir philo-machino-psychologique, enfin pour le club Orion, Oh ! Rions un peu...

POUM, A100% n°15

★ ANNÉE: 1989
★ AUTEUR: Alain Massoumipour

Page précédente : Aventures avant tout II
★ AMSTRAD CPC ★ DOWNLOAD ★

Type-in/Listing:
» Aventures  avant  Tout  n15    LISTING    FRENCHDATE: 2019-01-28
DL: 222
TYPE: PDF
SiZE: 258Ko
NOTE: Uploaded by hERMOL ; 1 page/PDFlib v1.6

★ AMSTRAD CPC ★ A voir aussi sur CPCrulez , les sujets suivants pourront vous intéresser...

Lien(s):
» Coding » Aventures avant tout VII (ACPC n°19)
» Coding » Aventures avant tout II (ACPC n°14)
» Coding » Chargement de fichiers .WIN
» Coding » Aventures avant tout VI (ACPC n°18)
» Coding » Aventures avant tout (ACPC n°13)
» Coding » Aventures avant tout V (ACPC n°17)
Je participe au site:
» Vous avez des infos personnel ?
» Vous avez remarqué une erreur dans ce texte ?
» Aidez-nous à améliorer cette page : en nous contactant via le forum ou par email.

CPCrulez[Content Management System] v8.7-desktop/c
Page créée en 630 millisecondes et consultée 929 fois

L'Amstrad CPC est une machine 8 bits à base d'un Z80 à 4MHz. Le premier de la gamme fut le CPC 464 en 1984, équipé d'un lecteur de cassettes intégré il se plaçait en concurrent  du Commodore C64 beaucoup plus compliqué à utiliser et plus cher. Ce fut un réel succès et sorti cette même années le CPC 664 équipé d'un lecteur de disquettes trois pouces intégré. Sa vie fut de courte durée puisqu'en 1985 il fut remplacé par le CPC 6128 qui était plus compact, plus soigné et surtout qui avait 128Ko de RAM au lieu de 64Ko.