Tutorial 06

Utiliser les touches dans un programme

 

Nouvelles commandes :

> getKey = Donne la valeur de la dernière touche préssée [PRGM] [>] [7]

Introduction :

Après les bases, voici quelque chose de très simple qui donnera un aspect plus pro à vos programmes et vous permettra de créer des jeux dignes de ce nom. En effet, la seule commande pour que l'utilisateur (ou le joueur) entre des informations succeptibles de changer le cours du programme (grace aux branchements de la leçon précédente) est Input! Pour un jeu dans lequel vous devez bouger un vaiseau (par exemple), le faire à coups d'Input n'est pas vraiement pratique! Cette leçon très rapide vous apprendra à utiliser les touches de direction dans un programme.

getKey :

C'est la seule nouvelle commande de ce tutorial. Elle renvoie un nombre. Vous l'utiliserez exactement de la même façon que pour toute autre variable. Mais attention : une fois que vous l'avez utilisée, cette variable reprend la valeur 0 jusqu'à la prochaine pression sur une touche.
Voici le programme :
:Lbl 0
Devinez : c'est tout frais normalement (il y a une leçon)
:getKey->K
Stoque la valeur de la dernière touche dans une variable pour pouvoir y accéder plusieurs fois
:If K Si K<>0... Souvenez-vous : Une fonction est fausse si elle est égale à 0 et vraie dans le cas contraire
:Disp K
...Affiche la valeur de K : Deuxième utilisation de K
:Goto 0
Ferme la boucle pour attendre un nouvel appui
Notez que l'on aurrai pu écrire "Disp getKey" directement mais des 0 aurai brouillé la lecture. Nous l'avons donc stockée dans K et l'avons affiché seulement s'il était différent de 0 (0 signiffie qu'aucune touche n'a été présée depuis le dernier appel de la fonction). Essayez le code suivant et voyez comme les touches seraient illisibles :
:Lbl 0 Idem : Début de la boucle
:Disp getKey
Affiche directement la valeur de la dernière touche, même si aucune n'a été préssée
:Goto 0
Ferme la boucle
Pour quitter l'un des deux programmes appyez sur [ON] pour le stopper immédiatement puis [1].
Ce programme est aussi utile que ceux pour tester les resultats des fonctions du menu [TEST] (souvenez-vous : c'était au tutorial 04). Non pas pour distribuer mais pour vous, programmeur! Grace à lui, vous pourrez obtenir le code de la touche que vous souhaitez connaitre pour votre jeu (ou programme).

Les codes des touches :

Voici le tableau des touches de la TI avec leurs codes

11 12 13 14 15
         
21 22 23 24 25 26
31 32 33

34

41 42 43 44 45
51 52 53 54 55
61 62 63 64 65
71 72 73 74 75
81 82 83 84 85
91 92 93 94 95
  102 103 104 105

Soit vous gardez toujours une copie du programme que nous venons de créer sur votre TI, soit vous apprenez le code des touches par cœur! Mais il y a une autre méthode :
Retenez que le nombre des dixaines de la valeur d'une touche est la ligneà laquelle appartient la touche en question et que l'unité est la colonne à laquelle elle appartient. Ainsi, la touch [APPS] est sur la ligne 4 et la colonne 2 ; son code est donc 42! Idem pour [ENTER] : ligne 10, colonne 5 : 105... Cette méthode est très simple, facile à retenir et n'encombrera pas votre TI!
Seules les touches directionnelles poseront problème au début mais on s'y fait et, à force, on les connait pas cœur car ce sont les plus utilisées.

Bouger une étoile :

Un peu de réflexion... Nous allons maintenant utiliser toutes les instructions que avons d'appris (sauf Input) pour créer un programme dans le but de vous montrer l'utilisation de getKey. Il s'agit d'appuyer sur les touches de directions pour faire bouger une étoile à l'écran texte.
Réfléchissez et ne regardez pas la réponse tout de suite...
C'est fait? Bon : qui dit affichage à un endrois précis sur l'écran texte dit Output(! Ensuite, et c'est l'objet de la leçon, vous devrez utiliser getKey pour connaitre la dernière pression de l'utilisateur et comparrer cette valeure à d'autres avec If et des opérateurs logiques ("=" par exemple). Vous devrez faire plusieures comparaisons, donc vous devrez stoquer la valeur de getKey dans une variable, ainsi que les valeurs X et Y, coordonnées de l'étoiles. Finalement, vous devrez insérer une étiquette avec Lbl au début du programme et un Goto pour y retourner à la fin et attendre une autre pression de l'utilisateur.
Voila comment vous devez résonner lorsque l'on vous demande de faire un programme (ou lorsque vous voulez en faire un). Ne surtout pas se jeter sur la TI mais réfléchir d'abord à la façon dont vous allez ordonner le programme et, surtout, comment vous allez faire pour transformer une règle du jeu (dans le cas d'un jeu) en une suite d'instructions comprise par la machine à programmer (car cela est valable pour tout programmeur et facilite les choses). Ça a l'air laborieux mais, vous verrez, ça va très vite et vous n'avez pas besoin de tout penser : juste l'essentiel.
Maintenant que tout est dit (et qu'un point important de la programmation a été abordé), place au programme que vous comprendrez, de fait, plus facilement et plus vite...
Voici le programme :
:ClrHome C'est compris, maintenant...
:5->Y:8->X
Initialisation des coordonnées de l'étoile pour la centrer au début (les deux points ont le même effet qu'un retour à la ligne et permet une meilleur lisibilité...)
:Lbl 0
pour la boucle... Comme précisé ci-avant
:Y->B:X->A
Ici, les anciennes coordonnées sont stoquées dans d'autres variables pour pouvoir effacer puis la bouger...
:getKey->K
Dernière touche préssée... simple!
:If K=24:X-1->X
Regardez le tableau des touches : Touche gauche : diminuer X de 1
:If K=25:Y-1->Y
Idem...
:If K=26:X+1->X
Dans la mesure du possible, et ce pour une meilleur lisibilité, ratachez toujours la condition
:If K=34:Y+1->Y
à son instruction (ou à Then) par deux points
:Output(B,A," ")
Efface l'étoile (avec les coordonnées sauvegardées et non-modifiées) au cas ou elle devrai être déplacée
:Output(Y,X,"*")
Réaffiche l'étoile à sa nouvelle position même si elle n'a pas bougé
:If K<>45
Au cas où la touche est différente de [Cherchez laquelle] alors...
:Goto 0
... va attendre une autre touche. Si K est égal à la touche 45 alors le programme s'arrête car il est arrivé à sa fin et n'a pas été rerouté vers son début
Ce fut très simple... n'est-ce pas? Je n'aurai même pas du mettre de commentaires (d'ailleurs, la prochaine fois je n'en mettrai pas)

Conclusion :

Tutorial, encore une fois, très simple mais important. Nous en avons profité pour voir la manière dont doit travailler un programmeur, ainsi que les deux points.

Retour : Sommaire
Aide : Liste des commandes
Précédent : Tutorial 05 : Conditions et branchements
Suivant : Tutorial 07 : Les boucles