Leçon 4 : L’input en Lua

Après ces trois leçons, vous devriez être à l’aise avec l’affichage de texte sur une page en lua, le changement de taille, de style et de couleur. Vous savez aussi comment placer le texte où vous voulez sur la page. On connait maintenant quelques astuces, comme appeler très facilement plusieurs variables avec des chiffres (ex : Ligne#1) dans un texte statique.

Dans cette quatrième (Déjà !) leçon, nous irons un peu plus loin dans le lua : nous verrons comment créer une saisie (input) tapée lorsque la page est active. Ceci nous ouvre beaucoup de portes quant à l’utilisation de documents intéractifs.

Leçon 4.1 : L’input

Grâce au lua, nous pouvons utiliser des événements utiles de plusieurs types. Bien qu’ici nous nous concentrerons sur les entrées du clavier, on peut faire la même chose avec les flèches, le touchpad, ou la souris. Ici, notre but sera “d’attraper” les caractères saisis dans une variable appelée answer (pour réponse : n’oublions pas que les accents sont mal gérés par TI-Nspire Scripting Tools. Je préfère donc le nom en anglais, au cas où certains étourdis oublieraient ce détails.)

    answer = ""
 
    function on.charIn(char)
        answer = answer..char
        var.store("ligne3",answer)
 
    -- On rafraichit l'écran à chaque fois que l'utilisateur appuie sur une touche
 
        platform.window:invalidate()
    end

On commence d’abord par définir la variable answer comme une string vide. (chaîne de caractère)

Lorsque l’on utilise la fonction on.charIn, chaque caractère saisi depuis le clavier est ajouté à la variable answer. On peut noter l’utilisation des deux points .. pour concaténer deux strings (coller ensemble, mettre bout à bout)

Dès qu’un caractère est ajouté à answer, la variable ligne3 est mise à jour, enregistrée et affichée. La variable est donc créée caractère par caractère, dès que l’un d’entre eux est tapé.

Je vais maintenant vous présenter l’opposé de var.recall, qui va chercher une variable dans le classeur TNS pour l’utiliser dans le script lua. A l’inverse, var.store assigne une valeur à une variable dans le classeur, appelée ici var. Si la variable n’existe pas, elle sera créée. Plutôt cool, non ?

“Et si je fais une erreur en tapant les caractères ?”
Pas de problème l’ami ! Et oui, il faut aussi pouvoir corriger les erreurs éventuelles, grâce à la touche backspace. Pour cela, nous allons utiliser la commande string.usub qui retourne la variable answer, moins un caractère. Par exemple, si on a fait une erreur à un mot, comme calculatrice, la commande retournera calculatric. A nous d’ajouter le e !

function on.backspaceKey()
 
    answer = answer:usub(0,-2)
    var.store("line3",answer)
    platform.window:invalidate()
 
end

En utilisant ces deux commandes, n’importe quel texte tapé sera ajouté à la variable answer et affiche à la ligne3. Comme nous l’avons vu dans la leçon précédente, l’affichage de ligne3 ne pose aucun problème particulier. Il suffit juste d’ajouter les lignes ci-dessus à votre script avant la fonction on.paint, et vous serez capable d’afficher les questions et les autres informations aux lignes 1, 2 et 4 ; le texte de l’utilisateur sera affiché à la ligne 3.

Trois questions surgissent des exemples présentés ici :

  • Comment et où entrons-nous les valeurs montrées sur chaque ligne ?
  • Comment tracer cette belle boîte bleue autour de la réponse ?
  • Et comment fait-on pour savoir si la réponse est bonne ou non ?

 

Leçon 4.2 : On assemble le tout

La première de ces questions nous permet de bien comprendre ce qui est en train de se passer ici. Il y a une interaction entre les variables TI-Nspire et celles de la page lua.

Je vous invite à étudier le script réalisé par Steve Arnold, que vous pouvez télécharger ici. (NB : Le cours est basé sur l’étude de ce programme.) C’est un quiz d’algèbre simple, qui montre l’interaction entre les variables lua et TI-Nspire. Les valeurs pour line1, line2 et ainsi de suite sont facilement définies au sein de la TI-Nspire.

Pour l’exemple de la multiplication, on génère deux nombres aléatoires, a et b. Pour se faire, le mieux est d’effectuer cette attribution dans un onglet Notes, bien qu’ici, on utilisera le petit programme quiz(). Si l’on définit les nombres aléatoires avec un programme, alors à chaque fois que le programme est appelé, ces valeurs seront générées à nouveau. Dans le cas présent, à chaque fois qu’une modification est faite dans la page, comme entrer des valeurs, la question sera réactualisée. Cependant, on ne veut pas que cela arrive ; on veut contrôler quand une nouvelle question est générée. Pour cela, on définit une variable appelée new (le nom importe peu). Puis on inclut new dans le calcul des nombres aléatoires. Cela se fait tout simplement en ajoutant ou en soustrayant new au calcul. Ainsi, dès que new change, alors a et b changeront aussi !

Dans la page 1.3, on choisit ce qui va apparaître dans les lignes 1 (ex: line1:=”add” ou “multiply”), 2 et 4. On a pas besoin de définir ce qui sera dans la troisième ligne, puisque ce sera notre zone d’input.

On définit aussi une variable appelée check (contrôler en anglais). On lui attribue la valeur 1 si la réponse (line3) est correcte, sinon 0. Bien sûr, le message sera différent si la réponse est bonne ou non. Pour vérifier la validité de la réponse, on utilise expr(line2) (la valeur de la question) et on la compare avec expr(line3) (la valeur de la réponse). Si ces valeurs sont identiques, alors la réponse est bonne !

Les deux variables new et check seront récupérées par notre script lua. Cela nous permettra de déterminer ce qui se passe dans différents cas, comme expliqué plus bas.
Leçon 4.3 : Place à l’art !

Leave a Reply