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