TUTORIAL : Comment programmer en basic sur les z80 ?
A Propos de ce tutorial
Ce tutorial a été conçu pour apprendre les bases de la programmation afin de pouvoir programmer des bons jeux et programmes utiles plus tard. Ceci se fait grâce à de l'entraînement comme toute chose et je vous encourage fortement à télécharger et essayer des programmes basic déjà conçus présents sur le net pour pouvoir à votre tour en faire des bons (ce dont je ne doute absolument pas =)).
Dans ce tutorial vous rencontrerez différents types de texte. Voici la signification (elle est en général expliquée avant et/ou très simple à deviner) :
Ceci est un titre
Ceci est un sous-titre
Ceci est du texte
Ceci est une remarque
Ceci est une séquence de touches qui sont tous entre crochets, comme par exemple [ENTER]
Ceci est pour indiquer la syntaxe d'une expression
Certaines expressions peuvent présenter des mots en italique ou entre crochets. Dans ce cas là il ne faut pas taper ce qu'il y a écrit en italique mais ce qu'il représente.
Par exemple : sub(chaine, début, fin) => le mot chaîne est en italique il ne faut pas écrire chaîne mais remplacer par une chaîne, par exemple : sub(Str0,2,2) (évidemment c'est la même chose pour début et fin il faut les remplacer par des expressions
Les arguments entre crochets sont facultatifs
Enfin, ceci est un code qu'il est possible de taper et d'exécuter sur la TI comme n'importe quel autre code
remarquez aussi ceci écrit en bas à droite -> CODE
A propos de l'auteur
Bon je vais pas longtemps discuter sur moi (et vous vous en foutez en plus) juste pour dire que c'est moi Tama qui a écrit ce tutorial et qu'il a été écrit le 20 Janvier 2007. Évidemment vous pouvez le reprendre et le modifier en faisant tout de même une référence à moi ;).
Bon voila nous pouvons commencer à apprendre à programmer !
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
I Les bases
1)z80 ? c'est quoi ça ?
Les z80 sont un ensemble de TI de la TI80 à la TI84+ SE. Ils sont appelés ainsi à cause de leur processeur qui est un processeur z80, le même que celui qu'on trouvait sur les anciennes Game Boy =). On fait souvent des appels au processeur lorsqu'on programme en Assembleur mais là n'est pas le sujet de discussion puisqu'on s'intéresse au basic =D. Ce tutorial s'adresse donc comme indiqué dans le titre à toutes les z80 et plus particulièrement aux TI83+ et TI84+
2)Le premier programme
Eh oui ! c'est le grand moment ! vous allez pouvoir créer votre premier programme !
Bon qu'est-ce qu'il faut faire ? Il faut d'abord ouvrir le menu programme d'où on pourra exécuter, éditer et créer des programmes ! (excitant, non ? =D). Ensuite il faut choisir l'option pour créer le programme qui est l'option NEW, situé tout à droite. Enfin il faut donner un nom au programme puis on peut enfin commencer !
Bon voici un résumé des touches utilisés avec la capture d'écran à droite
Pour créer un programme |
|
[PRGM] pour ouvrir le menu de programmes [<] pour accéder au menu New |1] (ou [ENTER]) pour créer un nouveau programme séquence de touches pour entrer le nom du programme [ENTER] pour confirmer et commencer à programmer |
|
A vous de choisir le nom de votre premier programme, mais choisissez le bien parce que le premier programme n'arrivera qu'une seule fois ! ;)
Pour ceux qui ne trouvent pas comment entrer le nom d'un programme, vérifier d'abord qu'il y a bien le A blanc sur fond noir qui clignote sinon appuyez sur [2nd][Alpha] pour le remettre puis tapez la combinaison de touches pour entrer le nom. Pour rappel, les lettres se trouvent en haut à droite de la touche par exemple, le A correspond à la touche [MATH]
Une fois cet intense instant d'émotion passé (quoi j'en fais trop ?) vous vous retrouvez devant un écran vide avec le nom du programme en haut et 2 points sur la 2ème ligne. Pas la peine de tomber dans la déception ceci est parfaitement normal !
C'est ici que vous allez rentrer vos lignes de code mais rentrer quoi ? comment ? c'est ce que nous allons voir dans le prochain sous-titre
3)Commençons à programmer !
Nous y voici ! Nous allons écrire nos premières lignes de programme !
Le programme que nous allons taper est très simple. Mais comment accéder aux fonctions de programmation ? il suffit d'appuyer une seule fois sur [PRGM] lorsqu'on est dans l'éditeur de programme (cf capture d'écran) pour dévoiler un tas d'options. Nous allons pour l'instant nous arrêter sur 2 fonctions qui sont vraiment basiques de chez basiques.
Comment accéder au menu prgm ? Réponse : appuyer sur [PRGM] dans l'éditeur
Les fonctions qui nous intéressent sont les fonctions Input et Disp. Où les trouver ? Tout simplement dans ce magnifique menu que nous venons de voir. Il suffit d'aller dans l'écran I/O grâce à la flèche droite [>] puis de repérer ces fonctions (et de leur tirer dessus =P). Input est donc le n°1 donc il faut appuyer sur...[1] tout simplement ! et de même il faut pour sélectionner Disp appuyer sur...[3] !! Quoi ? vous n'aviez pas trouvé ça ! alors abandonnez tout de suite la programmation =P
Le résumé comme d'habitude
Pour accéder aux fonctions Input et Output |
|
[PRGM] pour accéder aux menus de programmation [>] pour accéder au menu I/O [1] pour accéder à Input [3] pour accéder à Disp
|
|
Bonne nouvelle ! Le programme ainsi crée... ne fait rien ! d'ailleurs on va l'essayer pour en être sûr. Comment faire ? Tout simplement, on va d'abord quitter l'éditeur avec [2nd] QUIT
(QUIT se situe au dessus de [MODE]) puis on va lancer le programme : pour cela, on va ouvrir le menu PRGM encore une fois avec [PRGM] mais cette fois on va rester dans EXEC et sélectionner le programme qu'on vient de faire (qui devrait être le numéro 1).
Pour lancer un programme |
|
Quitter si c'est le cas le travail en cours (édition de programme...) avec [2nd][MODE] ouvrir le menu de programme avec [PRGM] Trouver le programme (ici c'est facile) et sélectionner par son numéro (s'il en a un) ou le mettre en surbrillance puis appuyer sur [ENTER]
|
|
Que se passe t-il alors ? On voit d'abord l'écran graphique avec les axes puis après avoir appuyé sur [ENTER]...AaaaaaAAAaargh ? qu'est-ce que ça signifie ? (ou comment inciter les gens à lancer un programme foireux =D)
Bon voici la capture d'écran pour ceux qui sont assez intelligents (hmm...à voir)pour ne pas avoir lancé le programme tout seuls =D
Mais oui il ne se passe rien ! je vous ai bien eu =D
Bon bavardage inutile il ne s'est effectivement rien passé tout simplement parce que les 2 fonctions Input et Disp qu'on a utilisés ont plusieurs fonctions possibles.
On va donc reprendre le programme et faire qu'il s'y passe quelque chose
Mais comment éditer ? Encore une fois il va falloir faire appel au menu PRGM mais cette fois il faut sélectionner EDIT et tout comme le menu EXEC il faut trouver le programme à éditer puis appuyer sur [ENTER] pour l'éditer.
Le code qu'on va taper est le suivant :You now
Input "NOMBRE?",A
Disp "A=",A
CODE
Je vous laisse faire puisque je suppose que vous savez comment faire tout ça. Non ? ah oui c'est les guillemets qui gênent ainsi que le point d'interrogation et le signe = (ça fait beaucoup =P)
Voici les différentes combinaisons pour accéder à ces touches (au passage la virgule est déjà sur le clavier)
Les guillemets " |
Le point d'interrogation ? |
Le signe = |
[ALPHA] puis " qui se situe au-dessus de la touche [+] |
[ALPHA] puis ? qui se situe au-dessus du signe - entre parenthèses |
[2nd][MATH] pour accéder au menu TEST puis [1] pour sélectionner = (ou [ENTER] ça marche aussi) |
Maintenant vous pouvez le faire.
Voici donc la solution pour ceux qui ne savent ou ne veulent pas le faire (qui j'espère sont le moins nombreux possible)
(capture d'écran à droite encore une fois)
Le premier programme |
|
[PRGM] pour accéder aux fonctions de programmation [>] pour accéder au menu I/O [1] pour entrer Input [ALPHA][+] pour les guillemets N O M B R E en lettres [ALPHA][(-)] pour le point d'interrogation [ALPHA][+] pour fermer les guillemets [,] A pour la fin de l'expression [PRGM][>][3] pour entrer Disp [ALPHA][+] pour les guillemets A ([ALPHA]+[MATH]) [2ND][MATH][1] pour = [ALPHA][+] pour fermer les guillemets [,] A pour la fin de la ligne |
Remarque : j'ai tout effacé au début pour montrer l'intégralité des touches |
Bon je crois pas que je devrais aussi détailler les prochaines fois. Vous n'êtes comme même pas aussi bêtes =D
Maintenant nous allons lancer ce programme. Vous savez bien évidemment comment faire ça (sinon allez voir plus haut). Voici le résultat que ça donne
Exécution du premier vrai programme...
Nous avons utilisé ici 2 fonctions : la fonction Input et la fonction Disp (vous l'avez remarqué ça n'est-ce pas =D)
Voici comment utiliser ces fonctions : D'abord la fonction Input
Input [[chaîne],variable] |
Input permet de donner une valeur demandée à l'utilisateur dans la variable variable.
L'argument chaine est facultatif, il précise simplement ce qu'il faut afficher à l'écran pour donner une indication à l'utilisateur de ce qu'il faut entrer
En revanche, la variable variable est obligatoire, sinon dans quoi va t-on stocker la valeur entrée ? ^^
Dans l'exemple ci-dessus, l'utilisateur rentre une valeur dans la variable A, qui est En revanche, la variable variable est obligatoire, sinon dans quoi va t-on stocker la valeur entrée ? ^^
Drôle de notation avec les crochets, n'est-ce pas ? En effet, on peut omettre les 2 arguments en même temps. Input réagira alors comme si on appuyait sur le bouton [Graph] et qu'on bougeait le curseur avec les flèches, il retournera ensuite la position X et la position Y du curseur dans les variables X et Y.
Regardons maintenant la fonction Disp
Disp [chaîne],[variable],[...] |
Eux ne sont pas du tout liés et il peut y avoir beaucoup de choses séparées par des virgules (les virgules hors guillemets signifient un retour à la ligne suivante). Comme l'écran fait 8x16 caractères (8 lignes et 16 colonnes) il est conseillé de ne pas mettre plus de 8 arguments à la suite (un argument est quelque chose situé entre 2 virgules ou Disp et la virgule.
Tout comme Input, l'absence d'argument a un effet (cf premier programme)
S'il n'y a aucun argument, Disp affiche l'écran Home, c'est à dire l'écran ou vous faites tous vos petits calculs.
S'il y a des arguments, Disp affiche ces arguments, chaînes ou variables.
Les 2 programmes qu'on a fait précédemment illustrent bien ces différents cas.
Voila ce long paragraphe (pas trop long non plus) s'achève ici. Avant de continuer au prochain paragraphe, un petit exercice :
Faites un programme demandant 3 variables, respectivement A,B et C puis affichez les avec Disp
Pas de solution, c'est fait exprès c'est un programme très facile à faire.
4)Les variables
Qu'est-ce qu'une variable ?
Tout programme utilise une voire plusieurs variables. Les variables c'est comme en maths quand on demande par exemple de résoudre une équation, on utilise la variable x (par exemple pour x²+2x=0). En TI-Basic les variables sont des nombres qui sont utilisables, qu'on peut définir et lire dans le programme.
Comment définir une variable ?
Pour l'instant, 1 solution est connue pour faire ça : Utiliser la fonction Input
Input "NOMBRE?",A affiche "NOMBRE?" à l'écran et demande une valeur qu'elle stocke dans A
La fonction Prompt situé également dans l'écran I/O, en dessous de Input permet également de faire ça
Prompt A
[?] Mais alors quel est l'avantage de Prompt par rapport à Input ?
Avec Prompt on peut aligner des variables à la suite pour définir plusieurs variables et économiser des lignes ce qu'on ne peut pas faire avec Input
Exemple : Les codes suivants sont strictement identiques :
Prompt A,B,C,D,E
Input A
Input B
Input C
Input D
Input E
En revanche, avec Input on peut utiliser des chaînes pour afficher quelque chose à l'écran puis demander une valeur ce qu'on ne peut pas faire avec Prompt.
Utiliser donc soit l'un soit l'autre en fonction des circonstances.
Il existe un autre moyen de définir des variables qui est la touche [STO>] située au dessus de [On]. Elle s'utilise ainsi : expression->variable
Par exemple : 20->A ou 57->B sont tout à fait exacts
C'est bien sûr celle qui est la plus fréquemment utilisée
On peut stocker des valeurs mais également des expressions.
Par exemple, combien vaut B à la fin de ce bout de code ?
5->A
3A->C
3A+2C->B
CODE
Un indice : Réfléchissez : Combien vaut A et combien vaut C, vous en déduirez la valeur de B
Solution : A vaut 5, C vaut le triple de A (3A) c'est à dire 3x5=15 et B vaut le triple de A auquel on ajoute le double de C donc 3x5+2x15=15+30=45
Remarque : la ligne Z->Z n'est pas possible, elle va sortir une erreur
Comment lire une variable ?
La variable est lue automatiquement par le programme et exploitable par les différentes fonctions présentes (prendre l'exemple du programme du paragraphe 1.3 qui affiche la valeur de A en utilisant la fonction Disp)
Bon voici l'exercice de fin de paragraphe :
Demandez la valeur de la variable A en utilisant soit Input, soit Prompt puis multipliez-la par 5 pour la stocker dans la variable B. Affichez alors A, B, A+B et AxB.
Indice : Disp fonctionne également avec des expressions telles que A+B ou A-B, inutile d'ajouter une nouvelle variable C pour faire les calculs
Nous voici arrivé à la fin du premier chapitre (ouf !) qui n'était (sans démoraliser) vraiment pas dur du tout. Dans le prochain chapitre nous aborderons la programmation + avancée en découvrant les boucles et les conditions, des éléments qui forment "la colonne vertébrale" du programme !
Avant de découvrir le prochain chapitre, un petit test (pas obligatoire, loin de là ^^) pour voir si vous avez tout bien compris du 1er chapitre :
Demandez une valeur A, une valeur B, une valeur C, une valeur D puis stockez dans E la valeur de 4A+3B+2C+D avant d'afficher E sur l'écran.
Vous avez trouvé ? Bien ! Vous pouvez passer sans problème au chapitre suivant. Sinon, vous pouvez revoir rapidement le chapitre pour trouver l'erreur.
Nous voici donc au chapitre 2 !
II Les boucles et les conditions
|
Boucles et conditions
Nous nous intéressons à présent à ce premier écran , "l'écran de bienvenue de programmation" ^^
1)Commençons par une structure ESSENTIELLE dans la programmation ==> j'ai nommé If...Then...Else...End
Je suppose que tout le monde est capable de traduire en français les mots if, then, else, et end même en ayant 5 de moyenne en anglais. Si non, ces mots sont tous simplement les équivalents de SI, ALORS, SINON, FIN. Pour ceux qui auraient déjà essayé d'autres langages ils sont très familiers avec ces choses. D'ailleurs ce tutorial ne leur est pas du tout utile =D.
Pourquoi ceci est essentiel dans la programmation ? eh bien tout simplement parce qu'il est impossible de faire un programme (bon, j'entends ! ;)) sans utiliser au moins une seule fois cette structure. Il faut forcément une condition à un moment
Par exemple on va prendre un RPG :
On a un monstre en face de nous, on est en plein combat. Comment détecter si le combat est fini et qui a gagné ?
Réponse : Grâce à une structure If...Then...Else...End !
Par exemple si on suppose que V c'est les PV du joueur et Z celui du monstre, on aura à un moment
...
If Z<0
Then
Disp "Joueur gagne !"
Else
Disp "Monstre gagne !"
End
...
CODE
qui s'interprète comme : Si le joueur n'a plus de PV, ALORS c'est le monstre qui gagne, SINON c'est le joueur qui gagne FIN
Grâce à cet exemple vous connaissez maintenant comment utiliser cette structure. Pour rappel c'est comme ça :
If condition
Then
Choses à faire si la condition est vraie
Else
choses à faire si la condition est fausse
End
Remarque : Ils ne sont pas tous obligatoires, même End lorsqu'il n'y a qu'une seule instruction à effectuer si la condition est vraie
Le code suivant est tout à fait valable :
... If Z<0 Disp "Joueur gagne !" ... |
CODE
Il va simplement afficher "Joueur gagne!" si Z<0. Cela revient exactement au même que
... If Z<0 Then Disp "Joueur gagne !" End ... |
CODE
Attention toutefois ! Si vous utilisez Then le End est obligatoire, de même que Else doit obligatoirement s'utiliser avec un Then devant.
Le code suivant est donc faux (soit il ne fera pas ce qu'il est censé faire, ou soit il retournera une erreur, probablement de syntaxe)
... If Z<0 Disp "Joueur gagne !" Else Disp "Monstre gagne!" End ... |
CODE
L'exercice de fin comme d'habitude =)
Demandez une variable (commande au choix) puis affichez :
Oui si c'est supérieur à 100
Non si c'est inférieur à 50
Inconnu si c'est entre 50 et 100
Indice : inutile d'utiliser des Then et des Else complètement imbriqués ! ce n'est qu'une seule instruction à chaque fois !
2)Une autre fonction très utilisée : la boucle : For...End
Ici une traduction mot à mot est inutile. Cette boucle sert tout simplement à répéter des instructions plusieurs fois
Exemple :
For(Z,1,1000)
Disp "Z=",Z
End
CODE
Vous vous imaginiez copier 1000 fois Disp "Z=",Z ? Les boucles For( sont là pour vous éviter ce (trèèèèès) ennuyant travail.
La syntaxe est : For(variable,début,fin,[pas])
Pas est facultatif. Lorsqu'il n'est pas indiqué il vaut par défaut 1. Attention donc que début soit bien inférieur à fin !
Attention aussi à ne pas modifier la valeur de variable dans la boucle sinon ça fausse le résultat
Finalement, une boucle For sert à éviter d'écrire les mêmes instructions une bonne dizaine voire centaine de fois. Les boucles for( évitent également des lignes de code telles que celle-ci
Lbl 1
If A<1000
Then
Goto 0
Else
Goto 2
End
Lbl 2
Disp "Stop"
CODE
Je dirais que c'est un code de débutant mais on s'en passe rapidement (d'ailleurs moi aussi je suis passé par là y a quelques années =)). Pour ceux qui n'auraient pas compris, je parlerai des Lbl et des Goto plus loin. (ce sont des "sauts" en quelque sorte)
Une petite illustration du code tout en haut (sans les Lbl et les Goto) avant le petit exercice de fin =)
Un exemple d'utilisation de For(
Le petit exercice de fin =) : Demandez un nombre N puis affichez la somme des nombres de 1 à N
Par exemple : si on entre 5, S=1+2+3+4+5=15.
indice : il suffit d'utiliser 3 variables : N pour la demande, S pour la somme et A qui va varier de 1 à S. (tout est dit là impossible de rater =D)
3)Ok, maintenant qu'on connaît ça, est-il possible de mélanger condition et boucle ?
Oui c'est tout à fait possible grâce à une nouvelle instruction qui elle aussi est très utilisée, la fonction While ou quelquefois Repeat
Pour ceux qui sont nuls en anglais (ils doivent être nombreux) While signifie tant que et Repeat signifie répéter.
Comme c'est une boucle, on doit terminer par End "la boucle While"
exemple de code utilisant While
0->A
While A<300
Input "A?",A
End
Disp A
CODE
Quel code bizarre ! Que va t-il donc faire ?
Dans la boucle While il y a 1 seule instruction : Input "A?",A
Maintenant réfléchissez à cette question : A quoi sert la ligne Input "A?",A ?
Réponse : Il affiche "A?" à l'écran, attend que l'utilisateur rentre une valeur puis la stocke dans A
ok (j'espère que vous avez deviné ça sans regarder la réponse) regardons maintenant la ligne While
While A<300 qui en Français donne tant que A<300
Revenons à la ligne Input :
Deux cas possibles :
Le nombre entré et stocké dans A est inférieur à 300
Le nombre entré et stocké dans A est supérieur ou égal à 300.
Maintenant envisageons les 2 cas possibles :
Que se passe t-il si on est dans le cas 1 ? On va passer à End puis revenir à While. A est t-il alors inférieur à 300 ? Oui. On continue donc dans la boucle puis on redemande un nouveau nombre pour A
Que se passe t-il maintenant dans le cas 2 ? Comme beaucoup l'auront deviné (j'espère =)), A est supérieur ou égal à 300. La condition du While n'est plus remplie donc la TI ne va pas exécuter ce qui se trouve dans la boucle, on passe donc à ce qu'il y a après le End, c'est à dire Disp A, donc on va afficher la valeur de A puis le programme s'arrêtera.
Pour ceux qui n'ont pas compris (ou n'avaient pas envie de lire) (ou les 2 ^^), voici la capture d'écran de ce programme qui résume assez bien :
(Remarque : j'ai pris Z au lieu de A mais c'est la même chose)
D'accord, on a appris ce que ça voulait dire While, mais c'est quoi Repeat ?
Ce n'est pas "propre" de le dire comme ça, mais Repeat est "le contraire" de While. En effet, Repeat signifie Répéter, qu'on doit interpréter comme Répéter tant que la condition n'est pas remplie contrairement à While qui signifie répéter tant que la condition EST remplie.
Par exemple, si on remplaçait While par Repeat dans le programme précédent, il se produirait exactement l'inverse, c'est à dire que le programme s'arrêterait (la boucle serait finie) uniquement si Z est inférieur à 300.
La plupart des programmeurs utilisent plutôt While que Repeat car la fonction While est plus courante et "plus facile" à utiliser. La fonction Repeat est préférée dans un seul cas : avec la fonction GetKey, mais j'y reviendrais plus tard (quoi, encore ?!)
Pour conclure, la syntaxe de While est :
While condition End |
Déjà fini ? eh oui, Chapitre bien court mais très important. Pour tout programme "avancé" (d'ici quelques jours) il faudra forcément utiliser l'une ou l'autre de ces instructions ! Avec un peu d'expérience vous pourrez les utiliser à merveille pour faire de beaux petits programmes (tous ronds =)).
FAISONS LE POINT
Nous voici arrivé à un point où on peut faire déjà de jolis petits programmes de base, notamment pour les maths ^^ ou pour des petits jeux sympas.
Jusqu'ici nous avons appris :
Comment créer/ exécuter/ éditer un programme
La fonction Input, la fonction Disp
Comment créer et utiliser des variables
Les conditions (IF...THEN...ELSE...END)
La boucle For() pour exécuter des instructions plusieurs fois
Les boucles While et Repeat pour exécuter des instructions avec condition
Avant de continuer, le but des FAISONS LE POINT est d'être sûr de maîtriser les notions précédemment acquises (ouah ! ça fait prof !). Pour ceci nous allons faire un petit programme utilisant tout ce qu'on a déjà appris.
Voici le but du jeu :
Un petit jeu de DEVINEZ MON NOMBRE contre la TI, tout simple : LA TI choisit d'abord au hasard un nombre (on va utiliser une fonction nommée Rand pour ça (rand pour random)) entre 0 et 200 puis le joueur a 15 essais pour essayer de deviner ce nombre.
Si au bout de 15 essais le joueur a trouvé ce nombre, il gagne sinon c'est la TI qui gagne. Le premier arrivé à 5 points gagne la partie.
Alors, transformons cette règle en programme (c'est ce qu'on appelle algorithme), que faire ?
Réfléchissez, si vous trouvez pas, la solution se trouve ici
Maintenant que vous avez l'algorithme, vous pouvez créer le programme
Encore une fois, réfléchissez (et éliminez le maillon faible !). La solution se trouve ici !
Voici maintenant la capture d'écran de ce programme :
Capture d'écran du programme
Voila ce FAISONS LE POINT est terminé. J'espère que le programme en question n'a pas posé de trop grosses difficultés sinon il faut retourner voir ce que vous avez déjà appris auparavant ! ^^
III Affichage et graphismes
Une petite pause après tous ces chapitres digérés et en même temps un chapitre très utile pour valoriser les programmes (sur console, un jeu beau graphiquement est beaucoup mieux qu'un jeu textuel....d'ailleurs je suis sûr que la plupart de ceux qui lisent ce tutorial passent les tartines de texte qui apparaissent dans les RPG ou la présentation du jeu)
Que faire alors pour faire des graphismes ? tout d'abord il faut savoir qu'il y a 2 écrans utilisables dans les programmes (3 sur TI89 et + mais là n'est pas le sujet =)). L'écran dit "Home" (sûrement dû à ces fameuses ti89 et +) c'est là où on fait les calculs et l'écran "Graph", là où on trace les fonctions. Vous les avez donc déjà tous utilisés au moins une seule fois (ou du moins si vous êtes au lycée).
Maintenant qu'on sait ça, on va aller chercher ces fameux menu pour les graphismes. Il y en a 2 : un que vous connaissez déjà et un autre qui est facile à trouver (pas la peine d'aller chercher dans le catalogue !)
Voici donc ces fameux menus (roulement de tambour...............)
POP!
Le 1er menu pour les graphismes est :
Le 1er menu
Toi ???? Haha haha oui j'ai tout manipulé depuis le début de ton aventure ! Ça te surprend n'est-ce pas ? Mais l'heure de ma vengeance est enfin arrivée !!!!
Oui délire :D cet écran nous amène à notre premier paragraphe de ce chapitre :
1) Les graphismes sur l'écran Home : la fonction Output
Effectivement, comme je l'ai expliqué plus haut (pour ceux qui ont lu les quelques lignes avant) il y a 2 écrans : l'écran Home peut être "contrôlé" grâce à ça
Dans les chapitres précédents on a déjà appris à se servir de Input et de Disp ainsi que de ClrHome. Nous avons déjà donc vu quasiment l'essentiel de l'écran Home, c'est pourquoi je vais pas m'attarder longtemps sur cet écran sauf pour une fonction... (re-roulement de tambour =)) la fonction Output.
Cette fonction est le n°6 dans l'écran I/O. Output sert à afficher un programme à un endroit donné de l'écran Home.
Maintenant petit test : Prenez l'écran Home videz le complètement puis remplissez le de 0. Maintenant comptez le nombre de 0 dans une ligne et le nombre de lignes que vous avez pu mettre. Combien trouvez vous ?
Bien sûr il y a 16 zéros dans une ligne et 8 lignes. L'écran Home de la TI est comme ça :
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | |
1 | ||||||||||||||||
2 | ||||||||||||||||
3 | ||||||||||||||||
4 | ||||||||||||||||
5 | ||||||||||||||||
6 | ||||||||||||||||
7 | ||||||||||||||||
8 |
Évidemment, vous aurez deviné qu'à gauche c'est les lignes et en haut les colonnes.
Maintenant qu'on a vu ça on peut comprendre la fonction Output
Soit la situation suivante : Vous voulez afficher Score et le score stocké dans la variable S à côté puis "/10" derrière
Que faire alors ?
On peut utiliser
Disp "SCORE :", S, "/10"
CODE
Mais ça ne marche pas du tout ça affiche SCORE, à la ligne tout à droite S puis /10 sur la 3ème ligne tout à gauche ! Que faire alors ?
Et c'est là que Output va être tellement important
Reprenons notre tableau. Supposons que nous allons afficher SCORE: en (1,1) (ligne 1 colonne 1), S en (1,10) et "/10" en (1,14). Voila ce que ça va donner sur l'écran
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | |
1 | S | C | O | R | E | : | 1 | 0 | / | 1 | 0 | |||||
2 | ||||||||||||||||
3 | ||||||||||||||||
4 | ||||||||||||||||
5 | ||||||||||||||||
6 | ||||||||||||||||
7 | ||||||||||||||||
8 |
Maintenant on va pouvoir utiliser Output pour afficher comme ceci
Output prend 3 arguments : d'abord le numéro de la ligne, puis le numéro de la colonne puis enfin l'expression (variable, nombre etc...)
Output(ligne, colonne, expression)
Voici donc la syntaxe de Output. Adaptons-le maintenant à notre exemple. Tout est prêt il reste plus qu'à appliquer brut :
On veut afficher "SCORE:" en (1,1) : le code est donc Output(1,1,"SCORE:")
On veut afficher S en (1,12) : le code est donc Output(1,12,S)
On veut afficher "/10" en (1,14) : le code est donc Output(1,14,"/10")
Voila ! Tout est fait ! On peut faire notre programme maintenant !
ClrHome
Output(1,1,"SCORE:")
Output(1,12,S)
Output(1,14,"/10")
CODE
Et la capture d'écran qui va avec :
Comment utiliser Output ?
Encore quelques remarques et on passe aux graphismes sur l'écran graphique ^^
S vaut 5 alors que normalement il devrait valoir 0 (pas déclaré dans le programme y a pas de 5->S ou de truc comme ça). Ceci est tout simplement dû au fait que je n'ai pas touché à S depuis le dernier programme, c'est à dire le jeu du FAISONS LE POINT. N'oubliez pas de toujours vérifier si les variables que vous utilisez sont libres (=valent 0). Sinon vous pouvez toujours mettre 0 dans ces variables. Malgré tout certains programmes utilisent volontairement des variables passés en argument.
Bien évidemment ligne et colonne ne sont pas forcément des nombres entiers entre 1-8/1-16. Ils peuvent très bien être des expressions. La preuve en images :) attention tout de même à ce que 1≤ligne≤8 et 1≤colonne≤16. si le mot est plus grand il va automatiquement débuter à la ligne suivante (essayez par exemple Output(1,15,"Hello")
Soit le code suivant (j'espère que vous vous souvenez encore des boucles For( ) :)
For(A,1,8
Output(A,1,"Hello"
End
CODE
Ce code va tout simplement afficher Hello sur toutes les lignes à gauche, comme le prouve la capture d'écran :
Output+For=ça !
Enfin, dernière remarque : Vous aurez peut-être des problèmes de placement lorsque vous utiliserez Disp et Output ensemble, ou des restes dus aux calculs précédents et/ou programmes. N'oubliez pas que dans la plupart des cas on utilise souvent ClrHome au début d'un programme avant d'utiliser Disp, Input, Prompt.
Le petit exercice avant d'en finir avec l'écran Home :
Affichez un texte (par exemple HELLO (comme par hasard :p)) défilant de haut en bas en utilisant Output.
Indice : Pour effacer, utiliser " " (espaces)
Voila maintenant la fonction Output n'a plus de secrets pour vous et vous pouvez utiliser l'écran Home là ou vous faites les calculs à votre guise ! N'est-ce pas beau ? :) Maintenant qu'on a cet écran en main, on va pouvoir attaquer l'autre : l'écran Graphique !
2) L'écran graphique : Les menus DRAW
Peut-être êtes vous déjà tombé sur un programme sur Internet avec des beaux graphismes (éventuellement en niveaux de gris) et vous vous êtes demandé comment ce programme a été fait...eh bien bientôt vous pourrez faire pareil ! (enfin faudra bien évidemment vous exercer pour faire des beaux graphismes et faire des recherches pour les niveaux de gris !)
Revenons en au titre : Qu'est-ce que les menus DRAW ? La capture d'écran qui suit va tout éclaircir...oui d'un seul coup !
Les menus DRAW
Convaincu ? maintenant comment y accéder à ces menus ? Eh bien la combinaison ultra méga secrète qui s'appelle [2nd][PRGM] va nous aider ^^.
Nous voici maintenant au premier menu.
2.1 L'écran DRAW
C'est ceux la !
Dans ces écran, on va principalement s'intéresser à quelques fonctions :
ClrDraw
Line
Horizontal
Vertical
Circle
Text
ClrDraw est une fonction qu'on utilise pour effacer l'écran. C'est l'équivalent de ClrHome mais attention : les graphes qui étaient là avant ne seront pas effacés et resteront ! N'oubliez donc pas de désactiver les fonctions avec FnOff ([Vars] [>] [4] [2]) avant de faire des dessins à l'écran.
Autre chose à propos de l'écran : les axes : ils sont gênants quelquefois ! Pour les désactiver il faut utiliser AxesOff qui se trouve dans[2nd] [ZOOM]
Enfin, pour faire des graphismes de façon pratique avec Line, et les Pt... il faut pas oublier de bien définir la fenêtre au début, c'est à dire modifier Xmin, Xmax, Ymin et Ymax
pour ça il y a plusieurs solutions :
Utiliser ZInteger directement depuis [ZOOM]
Xmin, Xmax, Ymin et Ymax se trouvent dans le menu [VARS] [1]. Ajoutez donc au début de votre programme les lignes suivantes :
0->Xmin
94->Xmax
0->Ymin
62->Ymax
CODE
Ces chiffres correspondent aux dimensions utilisables de l'écran.
Maintenant que nous pouvons utiliser l'écran vierge, nous pouvons continuer avec Line
Vous avez tous compris ce que ça veut dire Line en français (si non ajoutez un g quelque part...). Donc oui Line sert à tracer une ligne entre 2 points de coordonnées connues.
Prenons un exemple très rapide : Tracez un carré de côté 5 pixels dont le coin supérieur gauche est en 50,50
Bien évidemment, avec cet exemple, je suppose que vous avez utilisé la méthode précédente (0->Xmin et compagnie) sinon ça ne fera sûrement pas un carré (enfin il faut que Xmax - Xmin soit égal à 94 et Ymax - Ymin à 62). Maintenant on va tracer des lignes.
On sait que le coin supérieur gauche du carré est en (50,50). Comme c'est un carré de côté 5 pixels, les 3 autres sommets se situent donc en (50+5,50) , (50,50+5) et (50+5,50+5)
Le carré se situe donc entre les points (50,50), (55,50), (50,55), (55,55)
Maintenant on peut utiliser Line. Je balance l'exemple, de toute façon vous le comprendrez sûrement ^^
ClrDraw
0->Xmin
94->Xmax
0->Ymin
62->Ymax
Line(50,50,55,50
Line(50,50,50,55
Line(50,55,55,55
Line(55,55,55,50
CODE
Vous avez donc bien compris : une ligne entre les points (50,50) et (55,50), une entre les points (50,50), (50,55), une entre les points (50,55), (55,55) et une entre les points (55,55) et (55,50).
La capture d'écran de ce code :
Le carré de côté 5 fait devant vos yeux ^^
Pas besoin d'explication supplémentaire on passe direct à la syntaxe :
Pour afficher une ligne la avec Line la syntaxe est :
Line(x0,y0,x1,y1,[attr])
Je rappelle que les arguments entre crochets sont facultatifs (ici Attr). (x0,y0) est la position du 1er point et (x1,y1) la position du 2nd point.
Attr est un nombre valant 0 ou 1 :
Maintenant que faire si on veut une ligne horizontale/verticale qui traverse tout l'écran ?
C'est la qu'intervient
Horizontal pour tracer une ligne ... horizontale
Vertical pour tracer une ligne ... verticale !
Horizontal et Vertical peuvent donc tout à fait être remplacés par des Line mais l'avantage de ces fonctions est qu'ils ne nécessitent qu'un seul argument donc ils font gagner de la mémoire :
par exemple Horizontal 60 est la même chose que Line 0,60,94,60
Le petit exercice de fin, comme d'habitude =) :
Tout simple : remplir tout l'écran le plus vite possible.
Indice : sur quoi était ce paragraphe ? :D. Il faut aussi utiliser une boucle.
Passons maintenant à la fonction suivante : Circle
Circle, Circle...mais qu'est-ce que ça veut donc dire ???
Eh bien, je pense que vous l'avez deviné : Circle=cercle
Cercle ? c'est-à-dire qu'on va pouvoir faire des cercles sur l'écran ? Eh bien oui, on va pouvoir en faire grâce à cette fonction.
Circle est une fonction qui prend 3 arguments : la coordonnée x de son centre, la coordonnée y de son centre et son rayon
Par exemple, pour tracer un cercle de centre (47,31) et de rayon 5, on va utiliser Circle 47,31,5
Reprenons l'exemple précédent maintenant : on avait un carré de côté 5 pixels. On va maintenant essayer de construire le cercle tels que tous les sommets du carré appartiennent à ce cercle.
Un peu de maths maintenant (oui, les maths et la programmation sont très liés !)
Quelle est la formule pour calculer la longueur de la diagonale d'un carré de côté a ? Réponse : a√(2)
Maintenant qu'on a cette formule on peut obtenir les coordonnées du milieu de la diagonale et son rayon :
Soit I le milieu de la diagonale du carré et R le rayon du cercle :
Après calcul, on obtient :
I(52.5,52.5)
R≈3.5
Maintenant on revient à la programmation (encore là ? ^^) et plus particulièrement à Circle :
Le code est donc : Circle(52.5,52.5,3.5)
A remarquer que la TI arrondira le tout ce qui fera un cercle un peu moins conforme à nos attentes =]
Le nouveau code est donc :
ClrDraw
AxesOff
0->Xmin
94->Xmax
0->Ymin
62->Ymax
Line(50,50,55,50
Line(50,50,50,55
Line(50,55,55,55
Line(55,55,55,50
Circle(52.5,52.5,3.5
CODE
Et à l'exécution du programme on a :
Capture d'écran du programme
Bien sûr là ça ne se voit pas trop parce que le carré est tout petit ainsi que le cercle. Mais on peut tout multiplier par 3, par 5 etc...
Par exemple, même chose mais en 3 fois plus gros :
ClrDraw
AxesOff
0->Xmin
94->Xmax
0->Ymin
62->Ymax
Line(30,30,45,30
Line(30,30,30,45
Line(30,45,45,45
Line(45,45,45,30
Circle(37.5,37.5,10.6
CODE
La même chose 3 fois plus gros =)
Voila pour la fonction Circle, maintenant on peut passer à la suite : la fonction Text, une fonction très utilisée :
mais bien sûr avant le petit exercice :
Demandez une valeur n, puis après avoir bien réglé la fenêtre et avoir tracé les diagonales de l'écran, affichez un cercle de centre correspondant au centre de l'écran et de rayon n.
Indice : l'écran fait 94*62
Et si je veux afficher du texte sur l'écran, je fais comment ??
Cette question arrive juste à temps ! (comme par hasard...). Sur l'écran graphique on ne peut pas utiliser les Disp, les Input etc...que faire alors ? la fonction Text va nous être d'une grande aide dans ce cas.
Text comme texte pour ceux qui n'auraient pas compris est une fonction qui permet donc... d'afficher du texte sur l'écran graphique avec les dessins !
Cette fonction prend 3 arguments : la position x, la position y et le texte
Text y,x,texte
avec 0<=y<=57 et 0<=x<=94, x et y étant entiers
Non, il n'y a pas d'erreur de frappe dans ce que je viens de taper je suis encore tout à fait lucide ^^. En effet, comme pour les fonctions Pxl-On et compagnie on met d'abord la position verticale puis la position horizontale. Illogique ? pas tant que ça finalement
A noter que y=0 place le texte tout en haut et y=57 tout en bas. x reste inchangé (0=à gauche, 94=à droite)
Maintenant autre remarque : j'ai mis "texte" pas "expression" tout simplement parce qu'on peut combiner les deux ! En effet Text est en quelque sorte "l'équivalent" de Output. Mais avec Output on ne peut pas afficher du texte et des chiffres en même temps, on est obligé dans 95% des cas de savoir à l'avance où se trouvera le texte.
Avec cette fameuse fonction Text on peut donc écrire à la suite. Comment ? grâce à une... virgule ! eh
Maintenant prenons un exemple. Supposons qu'on ait une variable A qui varie de 0 à 62 et qu'on veuille savoir en temps réel sa valeur tout en traçant une ligne horizontale sur l'écran graphique. Alterner entre l'écran graphique et l'écran de calcul serait une très mauvaise idée on ne verrait quasiment rien !
On va alors utiliser Text. Voici donc le code ; essayez de le déchiffrer
ClrDraw
AxesOff
0->Xmin
94->Xmax
0->Ymin
62->Ymax
For(A,0,62
Text(0,0,"A=",A
Horizontal A
End
CODE
Que se passe t-il donc ? D'abord on est familier avec les 1ères lignes qui servent à dimensionner l'écran. Ensuite il y a une boucle et oh ! un Text
Pas la peine d'expliquer, même ceux qui n'auront rien compris comprendront avec la capture d'écran !
Capture d'écran
On obtient bien ici ce qu'on veut. Essayez maintenant de faire ça avec Disp A à la place de Text. J'espère que vos yeux vont bien ! ;)
Évidemment vous l'avez deviné les usages de Text sont multiples ! C'est même une fonction essentielle pour la programmation avec graphismes (pour afficher des instructions, des dialogues, des textes...)
Voila c'est fini pour Text. Maintenant on fait le traditionnel exercice de fin ^^ :
Demandez la valeur de Z, tracez un rectangle de côtés Z et 2Z sur l'écran, puis un cercle de rayon Z avec le centre de l'écran pour centre et affichez en haut à gauche "Z=" puis la valeur de Z