| 
  • If you are citizen of an European Union member nation, you may not use this service unless you are at least 16 years old.

  • Stop wasting time looking for files and revisions. Connect your Gmail, DriveDropbox, and Slack accounts and in less than 2 minutes, Dokkio will automatically organize all your file attachments. Learn more and claim your free account.

View
 

Tutorial Basic z80

Page history last edited by PBworks 12 years, 1 month ago

 

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 :

    1. Le nombre entré et stocké dans A est inférieur à 300

    2. 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 ^^

    1. 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.

    2. 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 :

    1. Utiliser ZInteger directement depuis [ZOOM]

    2. 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 :

    • 0 si vous voulez effacer la ligne entre les 2 points
    • 1 (très peu mis car "inutile") si vous voulez l'afficher

    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

     

     

     

     

     

     

     

     

     

     

     

Comments (0)

You don't have permission to comment on this page.