7. Le Jardin avec une condition  <<< Table des matières >>> 9. Peter dans un labyrinthe


8. Peter suit un itinéraire fléché

Dans un autre programme, nous allons apprendre à utiliser la réalisation conditionnelle de commandes . Nous laisserons Peter se déplacer sur une feuille où nous mettrons différentes marques . Selon la nature de celles-ci, Peter choisira sa direction .

D’abord, nous allons créer un nouveau programme . Comme vous le savez certainement depuis le chapitre 4, on crée un nouveau programme en cliquant sur le bouton New (Nouveau)  de la fenêtre des programmes .   . Le nouveau programme s’appellera Marques.

Dans ce programme nous aurons besoin de deux items, qui seront utilisés comme marques . Dans la fenêtre Global Variables and Functions (Variables et Fonctions Globales), copiez (avec le bouton droit de la souris) l’élément empty square (carré vide)  pour en faire deux nouveaux éléments . Nommez-les Left (Gauche) et Right (Droite). A titre de rappel : vous pouvez affecter un nom, par exemple en sélectionnant l’élément d’un clic sur son icône puis en pressant Alt+Entrée pour éditer le nom .

Faites passer les nouveaux items dans le mode édition en faisant un double clic sur leurs icônes . Dans l’élément Left (Gauche), dessinez une flèche tournée vers la gauche, et dans l’élément Right (Droite), dessinez une flèche tournée vers la droite, par exemple comme ceci:  et .

Nous allons préparer la feuille . Faites un double clic sur l’élément sheet (feuille)  . La feuille de programme apparaît dans la fenêtre d’édition .Nous allons créer un itinéraire pour Peter . Déposez les éléments Left (Gauche) et Right (Droite) sur la feuille de telle façon que Peter puisse passer dessus en décrivant un circuit fermé . Souvenez-vous que Peter part du coin inférieur gauche pour aller vers la droite . Pour déposer les items sur la feuille, faites-les d’abord glisser tous les deux depuis la fenêtre Global Variables and Functions (Variables et Fonctions Globales) vers un emplacement sur la feuille , puis vous les y déposez . Vous pouvez ensuite déplacer les items avec le bouton gauche de la souris . Un item qui vous encombre peut être supprimé en le déplaçant hors de la fenêtre . La feuille ressemblera alors à ceci (l’itinéraire de Peter est indiqué par la ligne pointillée fléchée) :

Lorsque la feuille de programme a été préparée, nous pouvons commencer l’assemblage de notre programme . Cette fois-ci nous allons commencer par le cycle principal . Peter doit continuellement se déplacer en suivant les marques, ce qui veut dire que le programme va être basé sur un cycle sans fin . Pour cette raison, nous allons préparer l’élément conditional repeating of commands (répétition conditionnelle de commandes)  . En fait le cycle ne sera pas sans fin, nous pourrons l’interrompre en appuyant sur la touche Esc (Echap). Mais apprenons-en d’abord un petit peu plus sur le fonctionnement du clavier .

Lorsqu’on appuie sur une touche du clavier, celle-ci envoie son code numérique à l’ordinateur . Ce code est un peu le numéro de série de la touche dans le clavier . L’ordinateur convertit ce code en un caractère (par exemple une lettre ou un nombre) qui peut être transmis à un programme. Dans notre programme sont disponibles , non seulement les caractères, mais aussi les codes numériques des touches . La fonction d’entrée (introduction) de caractère depuis le clavier est utilisée pour taper des textes depuis le clavier, comme nous le savons pour en avoir tapés souvent nous-mêmes  (par exemple, maintenir Shift (Maj) génère des majuscules). La fonction « entrée touche » sert au contrôle des programmes et des jeux (même les touches de contrôle comme Ctrl  génèrent des codes de touche, bien qu’elles ne génèrent aucun caractère) .

Lorsqu’une touche est pressée, son caractère ou son code est stocké dans une pile . La raison en est que, lorsque la touche est pressée, le programme pourrait ne pas être prêt à l’accepter . Lorsque le programme est prêt, il accepte l’information « touche pressée » venant de la pile . Cette information « touche pressée » est alors effacée de la pile . Lorsque vous utilisez des fonctions d’ entrée de données depuis le clavier , vous devez vous souvenir que lorsque vous chargez un caractère ou un code depuis le clavier, il est aussitôt effacé (de la pile) et que, par conséquent, le prochain chargement donnera un résultat complètement différent .

Les caractères et les codes sont stockés dans des piles séparées, indépendante l’une de l’autre . Ce sont comme des flux séparés de données . Un canal est utilisé pour les caractères et l’autre pour les codes numériques des touches .

Nous pouvons maintenant préparer la condition qui nous permettra de quitter le cycle principal du programme  à l’aide de la touche Esc (Echap). Nous allons utiliser une fonction d’introduction du code de la touche à partir du clavier . Nous savons qu’elle renvoie un code numérique ; nous aurons donc besoin d’une fonction de comparaison de nombres . Les fonctions de ce type sont situées dans le groupe calculations (calculs) sous le titre comparisons (comparaisons) . Nous utiliserons la fonction is not equal to (n’est pas égal à) . Faites-la glisser dans la condition de cycle while is valid (tant qu’est valide).

Le premier élément à comparer est key input (does not wait for press) (entrée touche (n’attend pas de pression))  . Nous allons le faire glisser vers la fonction comparative à partir du groupe controls (contrôles) ,  sous-groupe keyboard (clavier) . Nous avons déjà utilisé un élément de ce type (mais avec attente de pression sur une touche) dans les précédents chapitres . La différence entre les deux éléments est que celui-ci n’attend pas que l’on appuie sur une touche . Si aucun code n’est en attente, cet élément renvoie le code d’une situation où aucune touche n’a été pressée (c’est le nombre 0, mais nous n’avons pas besoin de connaître cette valeur, puisque nous avons un code symbolique no key pressed (pas de touche pressée) ).

Le second élément à comparer est la touche Esc (Echap) . Il est dans le même groupe que la fonction « entrée touche », mais il est niché plus profondément , sous keys (touches)  et control keys (touches de contrôle) . Cet élément est une constante numérique avec la valeur du code de la touche Esc (Echap), ce qui signifie que nous n’avons pas besoin de connaître ce code . Déposez cet élément sous l’élément « fonction entrée touche » dans la fonction comparative .

Que fait le cycle maintenant ? Lisez les commentaires à côté des éléments : "Lorsqu’il est valide que l’entrée touche n’est pas égal(e) à touche Echap, répéter les commandes (quelque chose) » . Cela à l’air plutôt compliqué, mais le sens vous apparaît , avec un peu de chance . Le cycle va être répété jusqu’à ce que l’on appuie sur la touche Esc (Echap) du clavier .

Remplissons le corps du cycle repeat commands (répéter les commandes) . Durant sa promenade, Peter va décider de sa direction en fonction du carré se trouvant devant lui . Cette décision sera prise en utilisant un nouvel élément , le conditional executing of commands (exécution conditionnelle de commandes). Il se trouve dans le groupe program control (contrôle du programme) . Faites-le glisser dans le corps du cycle repeat commands (répéter les commandes) .

Lorsque vous insérez un élément d’exécution conditionnelle de commandes, vous remarquez peut-être qu’il contient lui-même trois autres éléments . Le premier est  if valid (si valide) . Il teste si une condition est satisfaite . Nous utilisons déjà un élément de ce type dans le cycle conditionnel . L’élément vérifie si une condition est remplie et, si c’est le cas, les commandes dans les éléments  then do( alors faire) seront exécutées . Si la condition n’est pas satisfaite , ce sont les commandes dans l’élément else do (autrement faire)  qui seront exécutées .

Dans le test de satisfaction  de la condition, nous détecterons s’il y a un item « tourner à gauche » devant Peter . Nous avons rencontré un test semblable dans le chapitre précédent  et il est donc évident que nous alIons utiliser les éléments suivants : item identity (identité de l’item) , item in front of Peter (item devant Peter) et  Left (Gauche) .

Dans la première branche (then do (alors faire) ), nous mettrons deux commandes, step (pas)  et left (gauche) . La commande conditionnelle que vous avez construite signifie maintenant  : "S’il y a un item « tourner à gauche » devant Peter, Peter fera un pas en avant et tournera à gauche ; dans les autres cas, il fera quelque chose d’autre ".

A présent nous allons créer ce  "quelque chose d’autre". A l’aide du bouton droit de la souris, copiez à un emplacement situé plus bas la commande conditionnelle déjà totalement construite . Faites glisser la commande conditionnelle nouvellement créée à l’aide du bouton gauche de la souris , puis déposez-la dans la deuxième branche de la première commande conditionnelle (la branche else do (autrement faire) ). C’est une façon rapide de préparer la partie du programme qui va s’occuper de la deuxième possibilité qu’a Peter, tourner à droite .

Dans la nouvelle commande conditionnelle, remplacez Left (Gauche)  par Right (Droite) . De même, remplacez left (gauche)  par right (droite) . A présent vous savez probablement ce que Peter va faire s’il n’y a pas un item « tourner à gauche «  devant lui . Il va détecter s’il y a un item lui disant de tourner à droite . S’il y en a un , il va faire un pas en avant et tourner à droite . Si ce n’est pas le cas … Que devrait-il faire … ? Nous ne voulons rien de plus ; il est suffisant qu’il fasse un step (pas) . A l’aide du bouton droit de la souris, copiez l’élément « step » (pas) depuis la seconde branche de la condition .

Ca vous a semblé compliqué ? Ne vous en faites pas – le programme est prêt (voir son image ci-après). Démarrez le programme . Si tout est correct , Peter va courir en suivant les marques et, une fois arrivé dessus, il tournera à gauche ou à droite . Voulez-vous le faire courir plus vite ? Faites un double clic sur l’élément Peter  afin d’éditer le sprite de Peter . Cliquez sur le bouton Properties (Propriétés) . Une fenêtre de réglage des propriétés du sprite va apparaître . Dans le champ Phases per Step (Phases par Pas), tapez 4, puis appuyez sur Entrée. Redémarrez le programme . Peter va maintenant courir comme un fou, mais il n’en sera pas pour autant essoufflé .

Essayez de préparer un itinéraire plus compliqué pour Peter . Voici un exemple :


7. Le Jardin avec une condition <<< Table des matières >>> 9. Peter dans un labyrinthe