De Scratch Wiki en Français
(Changed manual titre to template and changed {{note}} to {{info}}) |
(Automated edit: Remove {{Enquête}}) |
||
Ligne 170 : | Ligne 170 : | ||
'''''En cours d'écriture''''' | '''''En cours d'écriture''''' | ||
{{Tuto}} | {{Tuto}} | ||
− |
Version du 28 juillet 2018 à 15:44
Hey !
Vous avez compris le titre ? Non ? Ah.
Disons que dans ce tuto, nous allons prendre une suite de caractères (par exemple, "ceci est une suite de caractères", bref, un texte), et nous allons mettre chaque mot de cette suite dans une variable. Ca peut sembler inutile, mais je vous assure qu'on peut en avoir besoin, alors autant savoir le faire !
Exemple
Vous avez créé un projet permettant d'exécuter une commande entrée par l'utilisateur. C'est-à-dire que si vous écrivez "dire Bonjour" dans une entrée, le sprite va dire "Bonjour" (oui, vu comme ça, ça sert à rien, je sais, mais c'est pratique pour créer un langage de programmation dans Scratch).
Voilà les commandes que vous avez faites :
demander [Entrer une commande] et attendre si <(réponse) = [dire Bonjour]> alors dire [Bonjour] end si <(réponse) = [dire Ca va]> alors dire [Ca va] end si <(réponse) = [dire Bonjour, ça va ?]> alors dire [Bonjour, ça va ?] end
Bref, vous avez compris. Il va falloir faire un script par réponse, et autant dire qu'il existe des millions de millions de réponses possibles (je ne connais pas la longueur maximale d'une entrée, mais c'est pas mal, croyez-moi).
On ne va pas s'ennuyer à faire des millions de conditions, et de toute façon, Scratch ne supporterais pas et crasherais.
Donc il vous faut un script pour savoir que le premier mot est "dire". Déjà, ça permet de savoir l'action que vous voulez que votre sprite exécute. Car vous pouvez parfaitement avoir créé plus d'actions, comme "avancer", "sauter", "penser"...
On va voir ça tout de suite !
Stockage du premier mot
Normalement, votre variable contient plusieurs mots.
Si ces derniers sont séparés par un espace (ce qui est assez courant, non ?) il va falloir que Scratch stocke tous les caractères présents avant cet espace.
Les variables
C'était prévisible, il faut des variables. Voilà celles que vous devrez créer :
(x) // parce que j'ai pas d'idée de nom (résultat) (mots :: list) // la liste dans laquelle seront tous les mots obtenus
Donc vous avez deux variables et une liste. Jusque là, tout ça bien.
x va servir à passer d'une lettre à l'autre dans la variable.
résultat va stocker le mot obtenu à chaque fois.
mots va contenir tous les mots de la variable, dans l'ordre.
Lettre par lettre
Vous devez créer un script permettant d'attribuer à x une lettre. Vous allez comprendre.
Donc déjà, on s'occupe de résultat.
mettre [résultat v] à (regroupe (résultat)(lettre (x) de (réponse)))
Donc résultat va regrouper sa valeur de base ainsi qu'une lettre en plus.
Voilà un petit tableau pour comprendre l'utilité de x, avec réponse = "Bonjour Scratch".
x | lettre x | résultat |
---|---|---|
1 | B | B |
2 | o | B + o = Bo |
3 | n | Bo + n = Bon |
4 | j | Bon + j = Bonj |
5 | o | Bonj + o = Bonjo |
6 | u | Bonjo + u = Bonjou |
7 | r | Bonjou + r = Bonjour |
Ah, avec x = 8, vous tombez sur un espace. C'est donc la fin du mot.
Pour le moment, c'est un peu dans le désordre. Pas grave. Vous avez donc ce script :
mettre [résultat v] à (regroupe (résultat)(lettre (x) de (réponse)))
Il faut désormais faire une boucle. Si vous avez tout compris (ce dont je doute un peu...) vous devriez savoir pourquoi cette boucle :
répéter jusqu’à <(lettre (x) de (réponse)) = [ ]> :: control end
Donc, si on regarde le tableau, la deuxième colonne correspond à :
(lettre (x) de (réponse))
Ce qui veut dire que le script s'arrête quand cette colonne contient " " (espace), et que résultat cesse de se remplir.
Donc, avec cette phrase exemple, résultat doit valoir "Bonjour" à la fin du script. Voyons le script.
répéter jusqu’à <(lettre (x) de (réponse)) = [ ]> :: control mettre [résultat v] à (regroupe (résultat)(lettre (x) de (réponse))) end
Si on regarde la première colonne, x augmente tout le temps d'1. Donc :
répéter jusqu’à <(lettre (x) de (réponse)) = [ ]> :: control mettre [résultat v] à (regroupe (résultat)(lettre (x) de (réponse))) ajouter à [x v] (1) end
Il ne reste qu'à ajouter les scripts d'initialisation des variables :
mettre [x v] à [1] mettre [résultat v] à [] répéter jusqu’à <(lettre (x) de (réponse)) = [ ]> :: control mettre [résultat v] à (regroupe (résultat)(lettre (x) de (réponse))) ajouter à [x v] (1) end
Ca marche ! Vous n'avez qu'à tester ;)
Bon, le problème, c'est que ça ne stocke que le premier mot. On va corriger ça.
Autres mots
Une autre boucle va être nécessaire ici. Elle va permettre de répéter l'action x + 1 autant de fois qu'il y a de lettres.
En cours d'écriture