Aller au menu - Aller au contenu

[Plan du site] Vous êtes ici --- > Le Site du Zéro > Les tutoriels > Non-Officiels > Programmation > Calculatrices > Casio > Liste Interactive > Lecture du tutoriel

Liste Interactive

Vous vous apprêtez à lire un tutoriel rédigé par un membre de ce site. Malgré tout le soin que ce membre a pu apporter au tutoriel, nous ne pouvons pas garantir que les informations contenues sur cette page sont exactes à 100%. Merci de garder cela en tête lorsque vous lirez cette page ;o)
Avatar
Auteur : Lpu8er
Note : 13 / 20 (5 votes)
Visualisations : 7 492

Plus d'informations Plus d'informations
Bonjour à vous, amis Zér0s !

Je vois que vous souhaitez concevoir un petit programme sympathique sous Casio.

Tout d'abord, je tiens à vous renvoyer au tutoriel de Deltod qui, bien qu'encore en chantier, vous montrera quelques fondamentaux à ce sujet. Nous aborderons tout de même ici les différentes techniques dont nous avons besoin, afin de réaliser l'objectif : créer une liste interactive.

Vous devez savoir que sous TI, ceci est très simple à faire. En Casio aussi, mais il faut utiliser quelques petites astuces.
Sommaire du tutoriel :
Icône du chapitre

Affichage par Locate

Parfois, on laisse certains choix à faire, lors de la création d'un jeu ou d'un tout autre programme sous Casio. Imaginons par exemple, que vous codiez un simple jeu, où un mode "2 joueurs" est disponible, ainsi qu'une aide, et une possibilité de quitter.

Vous allez logiquement coder :
Code : Autre
1
2
3
4
"1: Un joueur"
"2: Deux joueurs"
"3: Aide"
"4: Quitter"?->A


Par exemple. Et ceci nous produira un simple affichage qui commencera à la première ligne, premier caractère, et se terminera par le "?" symbolique demandant à notre utilisateur de rentrer la valeur qu'il souhaite, implicitement entre 1 et 4.
Ceci peut se nommer une liste statique.

Il y a quelques lacunes dans ce code. Dont l'une est le contrôle de la valeur donnée par l'utilisateur. Qu'est-ce qui l'empêche, en effet, de taper un simple 6 ? Ou encore 0 ? Il faut donc contrôler la valeur de sortie, dire "Si A est inférieur à 1 ou supérieur à 4, alors on redemande."
Nous verrons comment éviter cela.

De plus, une telle liste est peu agréable à lire. Le texte est collé, et à moins d'insérer de multiples espaces pour le décaler, on ne peut pas y faire grand-chose en codant ainsi.
D'où l'utilisation de Locate.

Code : Autre
1
Locate X,Y,Val


Locate affiche Val aux coordonnées X, Y. Val peut être une chaîne de caractères "Bouh !" ou un nombre, ou encore la valeur d'une variable.
On peut donc parfaitement écrire :

Code : Autre
1
2
3
8->A
Locate 3,5,A;
Locate 3,6,"A"

Ce qui affichera 8 aux coordonnées (3,5), et "A" aux coordonnées (3,6).

Ne vous préoccupez point du ';' il s'agit du symbole que nous utiliserons pour le retour à la ligne avec arrêt (attente d'une touche). Il s'agit du triangle plein, que l'on trouve en faisant Shift, Prgm, F5.
Ce joli petit symbole arrête momentanément le code, en affichant -Disp- ainsi que la ligne précédente. L'utilisateur doit alors appuyer sur EXE pour que le code continue.


Quid des coordonnées ?
Vous devez savoir que X représente l'axe des abscisses et Y celui des ordonnées. Pour éclaircir, tracez un tableau de 21 colonnes sur 7 lignes. Il s'agit de l'écran. La première ligne correspond à Y=1. La cinquième colonne représente X=5. Un caractère emplit l'une des cellules de notre tableau.
Écrire "18" à X=4 et Y=2, signifie que vous aurez le "1" à la position (4, 2) et le "8" à la position (5,2).

Attention !
Comme je vous l'ai dit, l'écran est alors symboliquement constitué de 21 colonnes et 7 lignes, ce qui signifie que X est compris entre 1 et 21 et Y entre 1 et 7. Il est toutefois recommandé de ne rien afficher en Y=1 et Y=7 par Locate.
De plus, si vous tentez d'afficher quelque chose en X=22 ou en Y=8, c'est-à-dire hors des dimensions dites ci-dessus, alors un "Syn Error" vous sera retourné.


À vous de jouer !
Deux exercices vous sont proposés ici.

1) Il s'agit de créer un code affichant "Hello Word", tout simplement, grâce à Locate au centre de l'écran, à la ligne 3 et 4. On doit donc avoir à l'écran, "Hello" à la ligne 3 et World à la ligne 4. Je veux que l'on ait 3 espaces blancs à gauche. Je vous laisse donc deviner la valeur de X.
Mais je veux qu'on ait un arrêt entre l'apparition de "Hello" et celle de "World". Utilisez donc le triangle plein dont on parlait tout à l'heure.

2) Il s'agit de reproduire la même liste statique, mais en utilisant, cette fois, Locate. Je veux qu'on ait un décalage de 4 espaces blancs à gauche, et 2 espaces blancs en haut. A noter que vous ne devez pas mettre le '?' dans le Locate.

AU FAIT : Locate se trouve par : Shift, Prgm, F6 (>), F4 (I/O), F1 (Lcte).

Pour les initiés, I/O signifie Input/Output, Entrée/Sortie... Bref.


Ça y est ?

CORRECTION

Exercice 1
Secret (cliquez pour afficher)

Code : Autre
1
2
Locate 4,3,"HELLO";
Locate 4,4,"WORLD"

C'est très simple, comme vous le voyez. Le choix pouvait être ardu, mais n'oubliez pas que nous avons 3 espaces blancs à gauche. Mettre un X=3 n'aurait laissé que 2 espaces blancs à gauche. :)



Exercice 2
Secret (cliquez pour afficher)
Code : Autre
1
2
3
4
5
Locate 5,3,"1: Un joueur"
Locate 5,4,"2: Deux joueurs"
Locate 5,5,"3: Aide"
Locate 5,6,"4: Quitter"
?->A

Il s'agit encore une fois d'accumuler les Locate. Ne pas oublier de sauter une ligne (rappel : EXE saute simplement une ligne, sans autre forme de procès, et termine la ligne de commande) entre le dernier Locate et le '?'.


Vous savez quasiment tout de Locate. Sachez que l'on peut également utiliser des variables pour les Coordonnées.
Code : Autre
1
2
3
9->F
3->K
Locate F,K,"Bouh";

Ce simple code, par exemple, stockera 9 en F et 3 en K. Il affiche ensuite "Bouh" aux coordonnées (9,3).

Locate apporte un effet visuel, mais a aussi une autre petite utilité, comme vous allez le voir. ;)

Contrôle et lancement

On a notre liste statique et un peu plus ergonomique. mais pour le moment, c'est tout ce que nous avons de plus.

Il s'agit à présent et pour le moment de contrôler la valeur entrée par l'utilisateur et de réagir en fonction.

Code : Autre
1
?->A


Imaginons qu'ainsi, nous avons notre utilisateur qui tape son choix (de 1 à 4, comme nous l'avons vu).

Si cet utilisateur tape 1, alors on envoie à un autre programme, qui contient, par exemple, le jeu.
De même s'il tape 2. On ne fait que garder la valeur de A.
Si l'utilisateur tape 3, en revanche, on doit l'amener là où il aura ses explications, l'aide sur le jeu.
Et s'il tape 4, on doit stopper le programme sans autre forme de procès.

Pour contrôler cette valeur, on utilisera simplement l'opérateur d'exécution '=>' [shift, Prgm, F3 (jump), F3 (=>)].
Et pour contrôler, un simple A=1, plutôt qu'une longue série de If / Then / Else.

Je vous renvoie encore au tuto de Deltod si vous avez oublié le fonctionnement des conditions et souhaitez une explication plus claire.

On aura donc :
Code : Autre
1
2
3
4
5
?->A
A=1=>"Bouh";
A=2=>"Blah";
A=3=>"Burp";
A=4=>Stop;


Pour le moment, notre code paraît bien inutile. Intéressons-nous à la dernière ligne. Stop. C'est une commande arrêtant l'exécution du programme. Pratique, puisque si notre utilisateur tape 4, c'est qu'il veut en fait quitter.

Note : si cet utilisateur tape frénétiquement (deux fois) sur EXE, le programme redémarrera. Ce qui est normal : un EXE sur un écran en mode RUN lance la dernière commande. Que ce soit un calcul, une fonction, ou un programme.


Pour trouver Stop :
Shift, Prgm, F2 (Ctl), F4 (Stop).

Et si l'utilisateur tapait 5 ? Ou "Afterburlohdn" ?

Il suffirait de dire "SI A<1 OU A>4 ALORS on retourne à l'écran du choix".
Vous connaissez SI, OU, ALORS.
Ici, nous utiliserons :
Code : Autre
1
A<1 Or A>5=>on fait ceci

Ce Or est introduit dans le tuto de Deltod auquel je vous renvoie une fois encore, en cas d'oubli.

Mais qu'en est-il du "on fait ceci" ? On veut revenir à l'écran du choix. Et on a justement à notre disposition un outil très efficace pour cela : le Goto.

Syntaxe :
Code : Autre
1
Goto X

Renvoie au Lbl X.
Par exemple, Goto 3 renverra à l'endroit où est écrit Label 3 (Label = Lbl).
Il faut donc un Label correspondant à chaque fois. Vous pouvez avoir plusieurs Goto sur le même Label, mais pas plusieurs Label pour un même numéro.
Considérez les Label comme des étiquettes, et des Goto comme des "Aller à l'étiquette".

Par exemple :
Code : Autre
1
2
3
4
Lbl 2
"Tapez 1 pour continuer"?=A
A!=1=>Goto 2
"Yeah !";


Ce code produira l'effet suivant :
1) affichage de "Tapez 1..." ;
2) l'utilisateur rentre un chiffre au choix ;
3) si ce chiffre est différent de 1, on renvoie au Lbl 2; sinon, on affiche "Yeah !".

Vous voyez qu'on n'a pas besoin d'un If / Then pour un contrôle aussi simple. Le Goto / Lbl est réellement puissant.

Pour trouver Goto et Label :
SHIFT, PRGM, F3 (JUMP).

Allez, c'est parti !

Je veux que vous me fassiez la liste statique de tout à l'heure, avec ces choix conditionnels. Si l'utilisateur tape 1 ou 2, on l'amène au Label 4.
S'il tape 3, au Label 2.
Et s'il tape 4, on arrête le programme.
Enfin, s'il tape autre chose, on le renvoie au Label 1, positionné avant la liste.
Je veux bien sûr que vous repreniez la totalité du code de notre liste statique :
Code : Autre
1
2
3
4
5
Locate 5,3,"1: Un joueur"
Locate 5,4,"2: Deux joueurs"
Locate 5,5,"3: Aide"
Locate 5,6,"4: Quitter"
?->A

Voilà, vous avez toutes les clefs en main !

...

Ça y est ?

CORRECTION
Secret (cliquez pour afficher)
Code : Autre
1
2
3
4
5
6
7
8
9
10
Lbl 1
Locate 5,3,"1: Un joueur"
Locate 5,4,"2: Deux joueurs"
Locate 5,5,"3: Aide"
Locate 5,6,"4: Quitter"
?->A
A=1 Or A=2 => Goto 4
A=3 => Goto 2
A=4 => Stop
Goto 1


Le principe est simple. Le dernier Goto n'a pas besoin d'une condition : les 4 cas "légaux" (c'est-à-dire dans le cadre du programme) étant déjà sujets à des Goto, le dernier ne sera pris en compte que si l'utilisateur tape autre chose que 1, 2, 3, ou 4.

Goto et Label sont des outils intéressants, évitant l'utilisation d'une boucle while. Il faut néanmoins se rappeler qu'en ce sens, ce duo n'étant pas une boucle, break ne fonctionne pas, et il faut utiliser un voire plusieurs autres label pour "sortir" de cette "pseudo-boucle".

Jusque là, nous avons simplement vu la méthode pour une liste statique. Nous allons à présent attaquer la liste interactive, de plain-pied, avec l'utilisation de Getkey.

La force du Getkey

Nous allons ici aborder l'utilisation de la Getkey. Il s'agit d'une pseudo-fonction récupérant le code de la touche enfoncée.

En effet, chaque touche a un code prédéfini. Ce qui permet, entre autres, à la machine de déterminer que faire lorsque telle ou telle touche est pressée. Ce qui permet de dire "en appuyant sur EXE, donner le résultat de l'opération ou exécuter l'instruction le cas échéant".

Pour obtenir les codes des touches, je vais vous guider pour la création d'une sorte de "mini-programme" capable de fournir, lorsque l'on appuie sur une touche, le code associé.

Voici les étapes :
1) on crée une pseudo-boucle avec Goto / Label
2) cette boucle continue tant qu'une touche n'est pas pressée ;
3) si une touche est pressée, on stocke le code de cette touche dans une variable qu'on affiche immédiatement.

Note de syntaxe :
il suffit de mettre "Getkey" pour que le programme fournisse le code de la touche appuyée.
Donc :
Code : Autre
1
Getkey -> A

stockera le code de la touche appuyée dans A.

Pour trouver Getkey :
Shift, Prgm, F6, F4 (I/O), F2 (Gtky).

Vous devriez pouvoir y arriver sans trop de problèmes.

...

Correction !!
Secret (cliquez pour afficher)
Code : Autre
1
2
3
Lbl 0
Getkey -> A;
Goto 0


Pourquoi une boucle ?

Getkey ne stocke l'appui que lorsque l'utilisateur appuie sur la touche au moment où le Getkey est appelé. Il faut donc mettre un Getkey dans une boucle (ou pseudo-boucle dans notre cas) pour qu'il fonctionne concrètement. De plus, pour afficher A, il nous faut utiliser le triangle plein (marqué ici ';', je vous le rappelle).

Voilà : ainsi, en appuyant sur une touche, vous obtenez le code de la touche associée. Un tel programme est souvent utile. Même si ces codes de touches sont tous dans le manuel, vous ne l'avez sans doute pas toujours sur vous.

Nous aurons besoin des codes des touches EXE, "flèche haute" et "flèche basse" pour notre liste interactive.
Vous obtiendrez :
EXE : 31
Flèche haute : 28
Flèche basse : 37.

J'ignore cependant si ces codes sont similaires pour tous les modèles de CASIO. Il est possible par exemple que cela change entre la Graph35 (celle que j'utilise) et les autres. D'où l'utilisation de ce mini-programme.


Nous avons nos codes de touches, l'utilisation de Getkey, et nous savons générer une liste statique. Nous savons également générer un affichage où nous le souhaitons sur l'écran.

L'assemblage est un peu compliqué à première vue.

Nous devons créer une pseudo-boucle dans laquelle nous afficherons notre menu.
Nous aurons une variable, nommée C par exemple, qui indiquera la position du "curseur" sur la liste.
Lorsque l'utilisateur appuyera sur la flèche haute (ou basse), on change la valeur de C en fonction. Et lorsqu'il appuie sur EXE, on vérifie la valeur de C, pour diriger notre visiteur selon son choix.

Imaginons, par exemple, notre liste statique qui sera bientôt interactive. Lorsque C est égal à 1, cela signifie que notre curseur est sur le premier élément de la liste ("1 joueur", dans notre cas). Pour C=2, c'est "2 joueurs", C=3 pour "Aide", C=4 pour "Quitter".

En commençant ainsi, vous pouvez voir la structure de notre liste ! :)

Attention, tout de même. Nous devons bien sûr utiliser un Goto pour sortir de notre pseudo-boucle à chaque fois, mais nous devons également vérifier que notre variable ne passe pas hors des possibilités, c'est-à-dire qu'elle ne soit ni inférieure à 1, ni supérieure à 4. Cette vérification doit se faire une fois la modification de C en fonction de la Getkey effectuée.

Imaginons que vous utilisiez le Label 1 pour créer la pseudo-boucle, le Label 2 pour commencer le jeu (que ce soit en 1 ou 2 joueurs), et le Label 3 pour arrêter le jeu.

Nous utiliserons le symbole "->" en tant que "curseur". C'est un choix comme un autre. :-°


Je rappelle qu'il faut, à chaque passage dans la pseudo-boucle, afficher le curseur selon la valeur de C, et uniquement à cet endroit. N'oubliez pas non plus d'initialiser C à une valeur qui nous convient(pourquoi pas 1 ? ;) )

Je vous laisse essayer. Il est probable que vous n'y arriviez pas directement. Dans ce cas, relisez les parties de ce tuto, une par une, et surtout celle-ci. Car c'est notre dernière ligne droite. :D

...

Pas réussi ? Réessayez.

...

Toujours pas ? Bien. Voici la correction.
Secret (cliquez pour afficher)

Code : Autre
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
1 -> C
Lbl 1
C<1 => 1 -> C
C>4 => 4 -> C
C=1 => Locate 5,3,"->"
C!=1 => Locate 5,3," "
C=2 => Locate 5,4,"->"
C!=2 => Locate 5,4," "
C=3 => Locate 5,5,"->"
C!=3 => Locate 5,5," "
C=4 => Locate 5,6,"->"
C!=4 => Locate 5,6," "
Locate 6,3,"1 joueur"
Locate 6,4,"2 joueurs"
Locate 6,5,"aide"
Locate 6,6,"quitter"
Getkey=31 And C=4 => Goto 3
Getkey=31 And C=3 => Stop
Getkey=31 And C=1 => Goto 2
Getkey=31 And C=2 => Goto 2
Getkey=28 => C-1 -> C
Getkey=37 => C+1 -> C
Goto 1


Il ne vous faut pas oublier de positionner les Label 2 et 3, bien entendu. L'avantage d'une telle pseudo-boucle devient évidente. Par exemple, à la fin du texte d'aide, vous pouvez mettre un Goto 1, ramenant ainsi à la liste :) .
La lenteur du curseur et le manque de réactivité sont dûs à la forme de la boucle. Si vous voulez améliorer les performances, insérez les mêmes conditions de Getkey juste avant l'affichage de la liste (donc une seconde fois).

Il existe quelques façons d'améliorer ce code. Je vais en présenter quelques-unes en annexe ;) .

Q.C.M.

Quelle fonction nous permet d'afficher du texte à l'endroit souhaité ?
Comment peut on symboliser l'écran ?
Comment arrêter un programme ?
Quel est le duo utilisé pour une pseudo-boucle inifinie ?

Statistiques de réponses au QCM


Voilà, vous pouvez dès lors créer une simple liste interactive.

Il est à noter que la manière proposée ici est très loin d'être la seule pour arriver à un résultat semblable. L'usage d'un while est tout aussi possible, avec un peu plus de diversification dans le code (usage de break, par exemple).
Je ferai probablement un autre mini-tuto à ce sujet.

Si vous avez des critiques ou des suggestions à me faire, n'hésitez pas !
Retour en haut Retour en haut


Créé : le 29/08/2006 à 19:22:13
Modifié : le 22/08/2008 à 16:10:16
Avancement : 90%
Licence : Copie non autorisée

Changer de design | En savoir plus | Plan du site | Politique d'accessibilité | Règles | RSS tutoriels | RSS news
Édité par Simple IT SARL : Nous contacter | Notre blog | Revue de presse | Publicité

Y'a plus rien à lire, faut remonter maintenant !

Hébergement web - Correction de tutoriels - Créer un site
Vous souhaitez apparaître ici ? Contactez-nous.

Nombre de connectés 120 Zéros connectés | Requêtes SQL 8 requêtes | Temps de génération de la page : Total (SQL) 0.1367s (0.1264s)