Annexe C
APPLICATIONS
Introduction :
Cette annexe vous permettra, tout au long de votre apprentissage, de tester vos connaissances et de faire le point sur ce que vous ne savez pas encore très bien. Lisez tout d'abord la Méthodologie à la création d'un programme puis, au fur et à mesure des tutorials, des liens vous mèneront ici pour créer un programme concret et utile d'après vos connaissances.
Méthodologie à la création d'un programme :
Avant toute application qui demandera la création entière
d'un programme voici comment en créer un. Et oui : on ne
s'improvise pas programmeur sans quelques bases!
> D'abord il faut bien préciser son idée : ce n'est pas la
peine de se jetter sur sa TI!
> Une fois que vous avez toutes les règles du jeu en tête,
réfléchissez comment vous allez les transformer en une suite
d'instructions qui seront comprises par la TI. Ça peut être
tout simple comme ça peut être difficile. Par exemple, des
programmes de mandes des algorytmes quelque peu poussés.
Qu'est-ce? Il s'agit d'une suite de calculs sur une même ligne
(ou deux) dont le but est crutial pour le bon fonctionnement du
programme. Par exemple Output(5X+.5V-2Y,5X-2Y+1,"*")
demande de la réflexion! C'est juste un exemple mais les plus
compliqués sont ceux qui permettent l'affichage de quelque chose
sur l'écran graphique...
> Ensuite, lorsque vous avez le squelette du programme (les
grandes lignes) vous pouvez commancer à le taper sur la TI.
> Si vous avez un algorytme dans votre programme et qu'il
n'est pas bon, ce n'est pas la peine de remplacer 5 par 6, puis
par 7 si cela ne fonctionne pas : reprennez votre réflexion en
ayant toujours à l'espris le but de ces calculs. Peut-être
avez-vous inversé les X et les Y : ça arrive souvent pour les
graphiques où il faut à la fois dessiner des lignes et de
tester des pixels (qui demande deux repères : les points et les
pixels).
> Si vous faites un programme compliqué et qu'il ne
fonctionne pas, éditez-le et essayez de vous mettre à la place
de la TI qui l'exécutera : suivez les lignes dans leur ordre
d'exécution et, si besoin est, écrivez les valeurs des
variables sur du papier pour connaitre à tout moment leur
valeurs et savoir où le programme sera redirigé en fonction des
variables etc...
> Puis exécutez-le et voyez s'il fonctionne comme prévu.
Application 1 (tut01 à tut05) [ Plus petit / Plus grand ] :
Vous êtes maintenant prêt pour la programmation. Bien sûr,
vous ne pouvez pas encore faire beaucoup de choses, mais c'est
l'occasion de faire le point sur vos connaîssances. Nous allons
améliorer ce formidable modèle.
Comme pour le reste des applications que vous devrez faire,
faites ce que vous pouvez. Si une option vous échappe, ne
l'ajoutez pas : vous êtes là pour apprendre alors regardez la
solution et vous le saurrez pour les autres fois...
La règle : chaque joueur, à tour de rôle, entre un
nombre entre 0 et 1000 (s'il ne respècte pas ces limites, lui
redemander) que l'autre joueur doit deviner avec le moins
d'essais possible. Car, au début du jeu, chacun à 50 pièces
(vous pouvez aussi demander aux joueurs le nombre qu'ils veulent)
et en perd autant qu'il a besoin d'essais pour deviner un nombre.
Dès qu'un joueur tombe à zéro pièce, il perd. La TI doit
indiquer "+GR" ou "+PT" pour le guider le
joueur s'il a faux.
Toutes les fonctions apprises durant les cinq
premiers tutorials sont requises. Si une commande vous échappe,
revoyez-la : on est pas en classe, vous avez le droit au cours!!
De plus, cette première application ne sert pas qu'à tester vos
connaissances en BASIC mais aussi à savoir si vous avez l'espris
d'un programmeur : si vous savez transposer les descriptions du
programme en language BASIC. Enfin, ce jeu est, d'après moi, le
meilleur pour commencer à programmer.
Aide : pour passer d'un joueur à l'autre, vous
pouvez vous référer au tutorial sur les
opérateurs logiques. Un paragraphe leur est consacré. Pour
le reste, ce sera très simple.
Solution : si vous avez terminé le programme
demandé et qu'il marche : tant mieux! Sinon, rééssayez ou
regardez la soluce :
:1->J J est le joueur qui joue
actuellement (0 pour le 1 et 1 pour le 2)
:50->L:50->M L et M sont les
pièces restantes des deux joueurs (L pour le 1 et M pour le 2)
:Lbl A Label pour passer d'un joueur
à l'autre
:J xor 1->J Changement de valeur
de J pour changer de joueur
:Lbl 0:ClrHome Label
pour choisir un nombre
:Disp 'JOUEUR X :","ENTRE UN NOMBRE","ENTRE 0
ET 1000" Remplacez X par un
espace
:Output(1,8,(J xor 1)+1) Si le
joueur un joue (valeur 0 pour J) alors c'est le joueur 2 qui doit
lui entrer un nombre, et vice versa. Ajouter 1 à J pour passer
de 0/1 (valeurs de J) à 1/2 (joueur en cours)
:Input N Demande le nombre que
l'autre joueur devra trouver
:If N<0 or N>1000:Goto 0 Si les limites 0/1000 ne sont pas repéctées
alors demander un autre chiffre
:ClrHome:0->E E est le nombre d'essais pour deviner le nombre
en cours
:Disp "JOUEUR X :","DEVINE LE
NOMBRE","ENTRE 0 ET 1000" Remplacer X par un espace
:Output(1,8,J+1) Affiche le joueur
qui joue
:Lbl J Label de jeu
:E+1->E Nouvel essai : augmente
le compteur d'essais
:Input C Demande le nombre à
deviner
:If C>N:Disp "+PT" Guider
le joueur en cas de nombre faux
:If C<N:Disp "+GR" Guider
le joueur en cas de nombre faux
:If N<>C:Goto J Si le nombre
n'est toujours pas trouvé : nouvel essais
:ClrHome Écran d'affichage des
résultat si nombre trouvé
:Disp "NBR TROUVE","EN __
ESSAIS","" Remplacer
__ par deux espaces
:Output(2,4,E) Affiche le nombre
d'essais à la place des __
:If J=0:L-E->L Si joueur un qui
vient de jouer alors lui enlever autant de pièces que d'essais
:If J=1:M-E->M Idem si c'était
le joueur deux
:If L<0:0->L On ne peut pas
avoir -X pièces!
:If M<0:0->M Idem pour le
joueur deux
:Disp "JOUEUR 1 :","JOUEUR 2 :" Affichage des pièces restantes...
:Output(4,12,L) ...
:Output(5,12,M) ...
:Pause Pour avoir le temps de
regarder ces pièces restantes!
:If not(L=0 or M=0) Si aucun joueur
n'est arrivé à zéro pièce...
:Goto A Au joueur suivant
:ClrHome Sinon l'un a gagné et
l'autre perdu!
:Disp "FIN DE JEU","","LE JOUEUR X
A","GAGNE" Remplacer
X par un espace
:If L=0:Then Si c'est le joueur un
qui n'a plus de pièces alors...
:Output(3,11,2) ...C'est le joueur 2
qui a gagné
:Else Sinon...
:Output(3,11,1) ...C'est le joueur 1
qui a gagné
:End Voilà : enfin terminé!
Notes : Je sais que c'était difficile (la
prochaine application sera plus facile) mais c'est un bon jeu et
autant le faire complet. Vous avez maintenant les connaissances
naissécaires pour créer un jeu à deux joueurs.
Pour passer d'un joueur à l'autre, on passe par la fonction xor. Seulement, c'est une fonction binaire
qui n'accèpte que des zéro ou des un. On diminue alors le
numéro du joueur pour passer de 1/2 à 0/1. Puis on inverse
l'état de la variable avec xor et on
rajoute 1 pour afficher le résultat! Si vous n'y avez pas
pensé, vous avez surement fait J+1->J:If
J=3:1->J. Ceci est bien aussi mais moins pro.
Maintenant, si vous voulez que ce jeu accepte plus de deux
joueurs, c'est ainsi qu'il faudra raisonner. Par exemple, pour
quatre joueurs : J+1->J:If J=5:1->J.
Si vous êtes vraiement perféctionniste, vous remarquerez que le
joueur un a plus de chances de perdre car il commence à joueur
en premier. À vous d'y remédier, si vous y tenez
Continuons notre apprentissage maintenant que
vous avez mis en application nos premières leçons :
Rendez vous au Tutorial
06 : Utiliser les touches dans un programme.
Application 2 (tut06 à tut08) [ RAPID(getKey)))) ] :
Avant d'entamer les gros chapitres qui suivent et histoire de
pouvoir leur survivre sans abandonner à la prochaine commande
que vous allez apprendre, je vous propose un programme de
rapidité qui vous permettra de mieux mémoriser la technique
pour connaître la valeur des touches apprise dans le tuorial 06.
La règle est simple : une valeur apparait à
l'écran : vous devez tapez sur la touche correspondante le plus
vite possible car le temps compte. Il commence à 500 et vous
aurrez perdu dès qu'il aura atteind 0 (vous devrez l'afficher
durant le jeu pour se rendre compte du temps restant). Pour toute
touche exacte vous rajouterez 11 au temps. À la fin du temps,
vous devez avoir reconnu au moins 20 touches (vous ajouterez donc
un compteur qui affichera le score tout au long du jeu).
Toutes les fonctions apprises durant tous les
tutorials précédents seront requis (sauf les très simples Input et Prompt
qui ont été assez vu pour le besoins des nouvelles commandes).
Les règles sont données : vous avez tout le temps que vous
voulez.
Aide : la partie crutiale du code (celle qui
déterminera si vous êtes un bon ou un exélent programmeur) est
celle du choix aléatoire de la touche. Ne cherchez pas
compliqué (vous trouverez la formule dans le
tutorial sur les touches) et rappelez-vous qu'aucune valeur
de touche non-existante (ou non-pressable) ne doit être
choissie. N'oubliez pas non-plus de touche! J'en ai surement trop
dit...
Solution : vous avez terminé? Tant mieux :
passons à la correction :
:ClrHome Pour utiliser tout l'écran
:Disp"RAPID(getKey))))" Affiche
le titre du programme. getKey est la commande
:Output(3,1,"TEMPS _ :") Introduit le temps restant. Le _ doit être
remplacé par un espace
:Output(5,1,"TOUCHES :") Introduit le nombre de touches trouvées
:Output(7,1,"APPUYE SUR :") Introduit le la touche courante sur laquel il
faut appuyer
:500->T:0->C Initialise le temps restant (variable T) et le
nombre de touches reconnues (C)
:Lbl 0 Label
qui permettra de choisir une nouvelle touche si elle est
erronée...
:10randInt(1,10)+randInt(1,5)->K Choisi une touche au hazard. Voir note après le
programme
:If K=35 Cette
touche n'existe pas. Si elle a été tiré au hazard...
:Goto 0 ...Alors
en choisir une autre
:If K=101 Cette
touche non plus n'existe pas (touche [ON]). Si piochée...
:26->K ...Alors
la compter comme [>]. En effet, la deuxième rangée contient
6 touches : il fallait en tenir compte
:Output(7,16," ") Dans le cas où la touche piochée est < 100
et que la dernière était > 100, efface le troisième
caratère
:Output(7,14,K Affiche
la touche à appuyer
:Repeat T=0 Boucle
jusqu'à ce que le temps soit écoulé
:T-1->T Diminue
le temps de 1
:If getKey=K Si
la dernière touche préssée est égale à celle piochée...
:Then ...Alors...
:T+11->T ...Augmente
le temps restant....
:C+1->C ...Augmente
le nombre de touches reconnues...
:Output(5,11,C) ...Et
l'affiche...
:Goto 0 ...Puis
pioche une nouvelle touche...
:End ...Fin de
If-Then
:Output(3,11," _ ") Efface le temps restant. _ doit être remplacé
par un espace
:Output(3,11,T) Affiche
le temps restant
:End Fin de la
boucle : attend la pression d'une nouvelle touche ou...
:Output(1,1,((PERDU)))))))))") ...ou affiche PERDU car le temps est écoulé
:Pause Pour éviter d'appuyer sur
une autre touche si le joueur n'a pas encore vu que c'était fini
Notes : Pour piocher une touche au hazard, nous
utilisons bien entendu randInt(. Dans
l'aide, je vous ai dit de regarder le
tutorila 06 pour avoir la formule : 10randInt(1,10)+randInt(1,5).
Elle vous parraît compliquée? La TI choisit un nombre entier
aléatoire entre 1 et 10 pour la ligne (il y a bien dix rangées
de touches ur la TI!) puis multiplie ce nombre par dix pour en
faire des dixaines et y ajoute un nombre entre 1 et 5 pour
l'unité ; la colone de la touche. Ensuite, il fallait prendre en
compte les touches inexistantes comme la 35 et la 101. Mais aussi
de la touche 26 qui ne peut être choisie grace à la formule que
nous venons de voir.
Continuons notre apprentissage maintenant que
vous avez mis en application nos trois dernières leçons :
Rendez vous au Tutorial
09 : Fonctions graphiques.
Retour : Sommaire
Aide : Liste
des commandes
Précédent : Annexe
B : LISTE DES COMMANDES
Suivant : Annexe
D : ÉDITER UN PROGRAMME SUR SON PC